Skip to content

Commit

Permalink
add workaround
Browse files Browse the repository at this point in the history
fix test
fix keybinding
  • Loading branch information
mhayashi1120 committed Nov 24, 2013
1 parent 637717e commit 63063e9
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 25 deletions.
36 changes: 27 additions & 9 deletions gosh-mode-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@

)

(ert-deftest gosh-mode-test--parse-current-context ()
(ert-deftest parse-current-context ()
:tags '(gosh-mode)

(let ((parenthese
Expand Down Expand Up @@ -125,7 +125,7 @@
(forward-char)
(should (equal (gosh-paren--next-context) `(case a (*)))))))

(ert-deftest gosh-mode-test--with-bracket ()
(ert-deftest with-bracket ()
:tags '(gosh-mode)

(let ((gosh-opening--auto-bracket-alist
Expand Down Expand Up @@ -165,7 +165,7 @@
(gosh-mode-test-funcall-in-sexp 'gosh-extract-local-vars sexp)
result)))

(ert-deftest gosh-mode-test--BoL ()
(ert-deftest BoL ()
:tags '(gosh-mode)
(gosh-mode-test-BoL "(let()_ -> _(let()")
(gosh-mode-test-BoL "(let(_) -> (let_()")
Expand All @@ -192,7 +192,7 @@
(replace-match "")
(funcall func)))

(ert-deftest gosh-mode-test--eldoc-context ()
(ert-deftest eldoc-context ()
:tags '(gosh-mode)
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse--current-fnsexp-in-list "(_fn \"A\")") '((fn) 0)))
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse--current-fnsexp-in-list "(f_n \"A\")") '((fn) 0)))
Expand All @@ -204,7 +204,7 @@
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse--current-fnsexp-in-list "(fn \"A\")_") '(nil 0)))
)

(ert-deftest gosh-mode-test--local-var-detection ()
(ert-deftest local-var-detection ()
:tags '(gosh-mode)
(gosh-mode-test-parse-local-vars '(define (method a1) _) '((a1)))
(gosh-mode-test-parse-local-vars '(define (method _ a1)) '())
Expand All @@ -222,7 +222,7 @@


(when (memq system-type '(windows-nt))
(ert-deftest gosh-mode-test--w32-path ()
(ert-deftest w32-path ()
:tags '(gosh-mode)
(should (equal "c:/cygwin/usr/local/" (gosh-cygpath->emacs-path "/usr/local/")))
(should (equal "usr/local/" (gosh-cygpath->emacs-path "usr/local/")))
Expand All @@ -248,7 +248,7 @@
\(define (hoge-key-opt :optional arg1 (arg2 #f) :key (key1 #f) key2))
")

(ert-deftest gosh-mode-test--parse1 ()
(ert-deftest parse1 ()
:tags '(gosh-mode)
(should (equal (gosh-mode-test-with gosh-mode-test-code1
(let ((forms (gosh-parse-read-all)))
Expand All @@ -267,7 +267,7 @@
(gosh-eldoc--object->string '(hoge (opts (quote ()))))
"(hoge (opts ()))")))

(ert-deftest gosh-mode-test--parse2 ()
(ert-deftest parse2 ()
:tags '(gosh-mode)
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse-symbol-at-point "aa bb_") 'bb))
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse-symbol-at-point "aa b_b") 'bb))
Expand All @@ -279,7 +279,7 @@
(should (equal (gosh-mode-test-funcall-in-text 'gosh-parse-symbol-at-point "(aa bb)_") nil))
)

(ert-deftest gosh-mode-test--defining-indent-rule ()
(ert-deftest defining-indent-rule ()
:tags '(gosh-mode)
(let ((gosh--smart-indent-alist nil))
(should (equal (gosh-smart-indent-rule 'a 1) '(a . 1)))
Expand All @@ -289,6 +289,24 @@
'((m (a . 2))
(a . 3))))))

(ert-deftest append-map ()
:tags '(gosh-mode)
(should (equal '(1 2 2 4 3 6 4 8)
(gosh-append-map*
(lambda (x) (list x (* x 2)))
'(1 2 3 . 4))))
(should (equal '(1 2 2 4 3 6 4 8)
(gosh-append-map
(lambda (x) (list x (* x 2)))
'(1 2 3 4))))
)

(ert-deftest length ()
:tags '(gosh-mode)
(should (equal 3 (gosh-length* '(1 2 3))))
(should (equal 2 (gosh-length* '(1 2 . 3))))
)

(provide 'gosh-mode-test)

;;; gosh-mode-test.el ends here
44 changes: 33 additions & 11 deletions gosh-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,19 @@ This function come from apel"
finally return res))

(defun gosh-append-map (proc init-ls)
(if (null init-ls)
'()
(let* ((ls (reverse init-ls))
(res (funcall proc (pop ls))))
(while (consp ls)
(setq res (append (funcall proc (pop ls)) res)))
res)))
(let* ((ls (reverse init-ls))
(res '()))
(while (consp ls)
(setq res (append (funcall proc (pop ls)) res)))
res))

(defun gosh-append-map* (proc ls)
(let ((res '()))
(while (consp ls)
(setq res (nconc (reverse (funcall proc (pop ls))) res)))
(when ls
(setq res (nconc (reverse (funcall proc ls)) res)))
(nreverse res)))

(defun gosh-flatten (ls)
(cond
Expand All @@ -244,10 +250,17 @@ This function come from apel"

(defun gosh-nth* (n ls)
(while (and (consp ls) (> n 0))
(setq n (- n 1)
(setq n (1- n)
ls (cdr ls)))
(and (consp ls) (car ls)))

(defun gosh-length* (ls)
(let ((n 0))
(while (consp ls)
(setq n (1+ n)
ls (cdr ls)))
n))

;;
;; string utilities
;;
Expand Down Expand Up @@ -1316,7 +1329,14 @@ d:/home == /cygdrive/d/home
(backward-prefix-chars)
(let* ((paren-end (gosh-paren-against-char paren-start))
(s (buffer-substring-no-properties (point) end))
(sexp (gosh-read-first-from-string (concat s `(,paren-end))))
;; TODO workaround eval-when-compile to construct regexp?
(middle-of-dot (format "[.][%s]*\\'" gosh-reader-ws))
(sexp (gosh-read-first-from-string
(concat
s
(and (string-match middle-of-dot s)
"()")
`(,paren-end))))
(last (last sexp)))
(when (and (consp last) prev)
(setcdr last (list prev)))
Expand All @@ -1329,7 +1349,9 @@ d:/home == /cygdrive/d/home
(gosh-end-of-sexp)
(let* ((ctx (gosh-parse--current-context 1))
(fnsexp (car-safe ctx))
(index (1- (length fnsexp))))
(index (if (/= (skip-chars-backward gosh-reader-ws) 0)
(gosh-length* fnsexp)
(1- (gosh-length* fnsexp)))))
(unless (and (consp fnsexp)
(gosh-symbol-p (car fnsexp)))
(setq fnsexp nil))
Expand Down Expand Up @@ -1408,7 +1430,7 @@ d:/home == /cygdrive/d/home
(gosh-extract--match-clause-vars (cadr x)))
((quote) '())
(t
(gosh-append-map 'gosh-extract--match-clause-vars x))))
(gosh-append-map* 'gosh-extract--match-clause-vars x))))
((and (gosh-object-p x)
(eq (gosh-object-type x) 'vector))
(gosh-extract--match-clause-vars
Expand Down
12 changes: 7 additions & 5 deletions gosh-stub.el
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,17 @@

(unless gosh-stub-mode-map

;;TODO or `gosh-stub-mode-map' is for developing
(let ((map (or gosh-stub-mode-map (make-sparse-keymap))))

(define-key map "\C-c?" 'gosh-show-info)
;;TODO not yet implement
;; (define-key map "\C-c?" 'gosh-info-show-index)
(define-key map "\C-c\C-c" 'gosh-stub-genstub)

(define-key map ")" 'gosh-closing-insert-paren)
(define-key map "]" 'gosh-closing-insert-bracket)
(define-key map "(" 'gosh-opening-insert-paren)
(define-key map "[" 'gosh-opening-insert-bracket)
(define-key map ")" 'gosh-paren-insert-close)
(define-key map "]" 'gosh-paren-insert-close-bracket)
(define-key map "(" 'gosh-paren-insert-open)
(define-key map "[" 'gosh-paren-insert-open-bracket)

(setq gosh-stub-mode-map map)))

Expand Down

0 comments on commit 63063e9

Please sign in to comment.