Back

rightmost (clj)

(source)

function

(rightmost loc)
Returns the loc of the rightmost sibling of the node at this loc, or self

Examples

clojure

(ns clojure.test-clojure.clojure-zip
  (:use clojure.test)
  (:require [clojure.zip :as zip]))


; zipper
;
; seq-zip
; vector-zip
; xml-zip
;
; node
; branch?
; children
; make-node
; path
; lefts
; rights
; down
; up
; root
; right
; rightmost
; left
; leftmost
;
; insert-left
; insert-right
; replace
; edit
; insert-child
; append-child
; next
; prev
; end?
; remove
babashka/babashka
(ns babashka.impl.clojure.zip
  {:no-doc true}
  (:require [clojure.zip :as zip]
            [sci.core :as sci :refer [copy-var]]))

(def zip-namespace
  {'zipper       (copy-var zip/zipper zip-ns)
   'seq-zip      (copy-var zip/seq-zip zip-ns)
   'vector-zip   (copy-var zip/vector-zip zip-ns)
   'xml-zip      (copy-var zip/xml-zip zip-ns)
   'node         (copy-var zip/node zip-ns)
   'branch?      (copy-var zip/branch? zip-ns)
   'children     (copy-var zip/children zip-ns)
   'make-node    (copy-var zip/make-node zip-ns)
   'path         (copy-var zip/path zip-ns)
   'lefts        (copy-var zip/lefts zip-ns)
   'rights       (copy-var zip/rights zip-ns)
   'down         (copy-var zip/down zip-ns)
   'up           (copy-var zip/up zip-ns)
   'root         (copy-var zip/root zip-ns)
   'right        (copy-var zip/right zip-ns)
   'rightmost    (copy-var zip/rightmost zip-ns)
   'left         (copy-var zip/left zip-ns)
   'leftmost     (copy-var zip/leftmost zip-ns)
   'insert-left  (copy-var zip/insert-left zip-ns)
   'insert-right (copy-var zip/insert-right zip-ns)
   'replace      (copy-var zip/replace zip-ns)
   'edit         (copy-var zip/edit zip-ns)
   'insert-child (copy-var zip/insert-child zip-ns)
   'append-child (copy-var zip/append-child zip-ns)
   'next         (copy-var zip/next zip-ns)
   'prev         (copy-var zip/prev zip-ns)
   'end?         (copy-var zip/end? zip-ns)
   'remove       (copy-var zip/remove zip-ns)})
BetterThanTomorrow/calva
(ns pez-rewrite-clj.zip
  "Client facing facade for zipper functions"
  (:refer-clojure :exclude [next find replace remove
                            seq? map? vector? list? set?
                            print map get assoc])
  (:require [pez-rewrite-clj.zip.base :as base]
            [pez-rewrite-clj.parser :as p]
            [pez-rewrite-clj.zip.move :as m]
            [pez-rewrite-clj.zip.findz :as f]
            [pez-rewrite-clj.zip.editz :as ed]
            [pez-rewrite-clj.zip.insert :as ins]
            [pez-rewrite-clj.zip.removez :as rm]
            [pez-rewrite-clj.zip.seqz :as sz]
            [clojure.zip :as z]))


;; **********************************
;; Originally in pez-rewrite-clj.zip.move
;; **********************************
(def right
  "See [[move/right]]"
  m/right)
(def left
  "See [[move/left]]"
  m/left)
(def down
  "See [[move/down]]"
  m/down)
(def up
  "See [[move/up]]"
  m/up)
(def next
  "See [[move/next]]"
  m/next)
(def end?
  "See [[move/end?]]"
  m/end?)
(def rightmost?
  "See [[move/rightmost?]]"
  m/rightmost?)
(def leftmost?
  "See [[move/leftmost?]]"
  m/leftmost?)
(def prev
  "See [[move/prev]]"
  m/prev)
(def leftmost
  "See [[move/leftmost]]"
  m/leftmost)
(def rightmost
  "See [[move/rightmost]]"
  m/rightmost)
typedclojure/typedclojure
(deftest zipper-test
  (is-tc-e seq [(t/Seqable t/Any) :-> (t/U nil (t/Seq t/Any))])
  (is-tc-e #(zipper vector? seq (fn [_ c] c) "abc")
           [-> (t/Vec t/Any)]
           :requires [[clojure.zip :refer [zipper]]])
  (is-tc-err #(zipper vector? seq (fn [c] c) "abc")
             :requires [[clojure.zip :refer [zipper]]]))

(deftest rightmost-test
  (is-tc-e #(rightmost [1 2 3]) 
           [-> (t/Vec t/Any)]
           :requires [[clojure.zip :refer [rightmost]]])
  (is-tc-err #(rightmost [1 2 3]) 
             [-> t/Str]
             :requires [[clojure.zip :refer [rightmost]]])
  (is-tc-err #(rightmost 1)
             :requires [[clojure.zip :refer [rightmost]]]))
marick/fp-oo
(require '[clojure.zip :as zip])

(def skip-to-rightmost-leaf
     (fn [zipper]
       (let [over (zip/rightmost zipper)]
         (if (or (not (zip/branch? over))
                 (empty? (zip/children over)))
           over
           (-> over
               zip/down
               skip-to-rightmost-leaf)))))

                              (above? zipper 'quote)
                              ;; The following could be written like this:
                              ;; (if (nil? (zip/right zipper))
                              ;;   zipper
                              ;;   (-> zipper zip/right do-node))
                              ;; ... instead of using `skip-to-rightmost-leaf`. 
                              ;; I prefer the consistency of having all the `cond`
                              ;; clauses use `advancing`. 
                              ;; In any case, in the real Midje code,
                              ;; skip-to-rightmost-leaf is used in other
                              ;; places.
                              (advancing (fn [] (-> zipper zip/down skip-to-rightmost-leaf)))
                              
                              (at? zipper '=>)
                              (advancing 
                               (fn []
                                 (let [replacement (list 'expect
                                                         (-> zipper zip/left zip/node)
                                                         (-> zipper zip/node)
                                                         (-> zipper zip/right zip/node))]
                                   (-> zipper
                                       zip/left
                                       (zip/replace replacement)
                                       zip/right
                                       zip/remove
                                       zip/next
                                       zip/remove))))
                              :else
                              (advancing (constantly zipper))))]
         (-> form zip/seq-zip do-node zip/root))))

                              (above? zipper 'quote)
                              (advancing (fn [] (-> zipper zip/down skip-to-rightmost-leaf)))
                              
                              (above? zipper 'provided)
                              (advancing
                               (fn []
                                 (let [function-call-z (-> zipper zip/down zip/right)
                                       arrow-z (-> function-call-z zip/right)
                                       return-value-z (-> arrow-z zip/right)
                                       addition (list 'fake
                                                      (zip/node function-call-z)
                                                      (zip/node arrow-z)
                                                      (zip/node return-value-z))]
                                   (-> zipper
                                       zip/left
                                       (zip/append-child addition)
                                       zip/right
                                       zip/remove))))
                              
                              (at? zipper '=>)
                              (advancing 
                               (fn []
                                 (let [replacement (list 'expect
                                                         (-> zipper zip/left zip/node)
                                                         (-> zipper zip/node)
                                                         (-> zipper zip/right zip/node))]
                                   (-> zipper
                                       zip/left
                                       (zip/replace replacement)
                                       zip/right
                                       zip/remove
                                       zip/next
                                       zip/remove))))
                              :else
                              (advancing (constantly zipper))))]
         (-> form zip/seq-zip do-node zip/root))))
videlalvaro/clochure

[ns clojure.test-clojure.clojure-zip
  [:use clojure.test]
  [:require (clojure.zip :as zip)]]


; zipper
;
; seq-zip
; vector-zip
; xml-zip
;
; node
; branch?
; children
; make-node
; path
; lefts
; rights
; down
; up
; root
; right
; rightmost
; left
; leftmost
;
; insert-left
; insert-right
; replace
; edit
; insert-child
; append-child
; next
; prev
; end?
; remove