tweaking the ruby-mode snippets slightly

This commit is contained in:
capitaomorte 2009-11-27 16:05:05 +00:00
parent 295972897f
commit 1c812b8692
5 changed files with 33 additions and 28 deletions

View File

@ -17,11 +17,10 @@
((string-match "_" fn) (replace-match "" nil nil fn)) ((string-match "_" fn) (replace-match "" nil nil fn))
(t fn)))) (t fn))))
(defun yas/ruby-in-interpolated-string-p () ;; conditions
(eq (fourth (syntax-ppss)) ;;
?\")) (yas/define-condition-cache yas/ruby-in-interpolated-string-p (eq (fourth (syntax-ppss)) ?\"))
(yas/define-condition-cache yas/ruby-in-comment-p (fifth (syntax-ppss)))
(defun yas/ruby-in-comment-p () (yas/define-condition-cache yas/ruby-in-string-p (fourth (syntax-ppss)))
(fifth (syntax-ppss)))

View File

@ -1,9 +1,13 @@
# -*- mode: snippet -*- # -*- mode: snippet -*-
# type: command
# key: { # key: {
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# assumes some sort of autopairing of the braces such as autopair.el or ruby electric
# that would have added the closing brace.
# name: Insert { |variable| … } # name: Insert { |variable| … }
## condition: "source.ruby - string - comment" # condition: (not (or (yas/ruby-in-comment-p) (yas/ruby-in-string-p)))
# -- # --
{ ${1:$(if (string= yas/text "") "" "|")}${1:variable}${1:$(if (string= yas/text "") "" "|")}${2:`yas/selected-text`} (yas/expand-snippet (concat
"{ ${1:$(if (string= yas/text \"\") \"\" \"|\")}${1:variable}${1:$(if (string= yas/text \"\") \" \" \"| \")}`yas/selected-text`$0"
(save-excursion (if (search-forward-regexp "}" (line-end-position) t)
"" "}"))))

View File

@ -4,6 +4,6 @@
# name: New Block # name: New Block
## condition: "source.ruby" ## condition: "source.ruby"
# -- # --
`[[ $TM_LINE_INDEX != 0 ]] && echo; echo`=begin rdoc `(if (save-restriction (widen) (eq 1 (line-number-at-pos))) "\n\n" "\n")`=begin rdoc
$0 $0
=end =end

View File

@ -2,6 +2,6 @@
# key: y # key: y
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: :yields: # name: :yields:
## condition: "source.ruby comment" # condition: (yas/ruby-in-comment-p)
# -- # --
:yields: ${0:arguments} :yields: ${1:arguments}

View File

@ -447,13 +447,8 @@ Attention: These hooks are not run when exiting nested/stackd snippet expansion!
"Hooks to run just before expanding a snippet.") "Hooks to run just before expanding a snippet.")
(defvar yas/buffer-local-condition (defvar yas/buffer-local-condition
'(if (and (not (bobp)) '(if (or (fourth (syntax-ppss))
(or (equal 'font-lock-comment-face (fifth (syntax-ppss)))
(get-char-property (1- (point))
'face))
(equal 'font-lock-string-face
(get-char-property (1- (point))
'face))))
'(require-snippet-condition . force-in-comment) '(require-snippet-condition . force-in-comment)
t) t)
"Snippet expanding condition. "Snippet expanding condition.
@ -1052,11 +1047,9 @@ conditions to filter out potential expansions."
(symbolp (cdr local-condition)) (symbolp (cdr local-condition))
(cdr local-condition))))))) (cdr local-condition)))))))
(defun yas/template-can-expand-p (condition &optional requirement) (defun yas/template-can-expand-p (condition requirement)
"Evaluates CONDITION and REQUIREMENT and returns a boolean" "Evaluates CONDITION and REQUIREMENT and returns a boolean"
(let* ((requirement (or requirement (let* ((result (or (null condition)
(yas/require-template-specific-condition-p)))
(result (or (null condition)
(yas/eval-condition condition)))) (yas/eval-condition condition))))
(cond ((eq requirement t) (cond ((eq requirement t)
result) result)
@ -1922,11 +1915,19 @@ will only be expanded when the condition evaluated to non-nil."
;;; ;;;
(defvar yas/condition-cache-timestamp nil) (defvar yas/condition-cache-timestamp nil)
(defmacro yas/define-condition-cache (func doc &rest body) (defmacro yas/define-condition-cache (func doc &rest body)
`(defun ,func () ,(when doc "Define a function FUNC with doc DOC and body BODY, BODY is
(concat doc executed at most once every snippet expansion attempt, to check
expansion conditions.
It doesn't make any sense to call FUNC programatically."
`(defun ,func () ,(if (and doc
(stringp doc))
(concat doc
"\n\nFor use in snippets' conditions. Within each "\n\nFor use in snippets' conditions. Within each
snippet-expansion routine like `yas/expand', computes actual snippet-expansion routine like `yas/expand', computes actual
value for the first time then always returns a cached value.")) value for the first time then always returns a cached value.")
(setq body (cons doc body))
nil)
(let ((timestamp-and-value (get ',func 'yas/condition-cache))) (let ((timestamp-and-value (get ',func 'yas/condition-cache)))
(if (equal (car timestamp-and-value) yas/condition-cache-timestamp) (if (equal (car timestamp-and-value) yas/condition-cache-timestamp)
(cdr timestamp-and-value) (cdr timestamp-and-value)
@ -3043,12 +3044,13 @@ will be deleted before inserting template."
;; them mostly to make the undo information ;; them mostly to make the undo information
;; ;;
(setq yas/start-column (save-restriction (widen) (current-column))) (setq yas/start-column (save-restriction (widen) (current-column)))
(insert template)
(setq snippet (setq snippet
(if expand-env (if expand-env
(eval `(let ,expand-env (eval `(let ,expand-env
(insert template)
(yas/snippet-create (point-min) (point-max)))) (yas/snippet-create (point-min) (point-max))))
(insert template)
(yas/snippet-create (point-min) (point-max)))))) (yas/snippet-create (point-min) (point-max))))))
;; stacked-expansion: This checks for stacked expansion, save the ;; stacked-expansion: This checks for stacked expansion, save the