tweaking some basic objc snippets

This commit is contained in:
capitaomorte 2010-03-14 19:58:27 +00:00
parent a090443417
commit f1ce4866b6
9 changed files with 46 additions and 34 deletions

View File

@ -1,4 +1,24 @@
;;; conditions ;;; constants
(defvar yas/objc-void-regexp "\\(void\\|IBAction\\)")
;;; helper stuff
(defun yas/objc-guess-instance-name (text)
(if (string-match "NS\\(\\([AEIOQUY]\\)?[^ *]*\\)" text)
(if (match-beginning 2)
(concat "an" (capitalize (match-string-no-properties 1 text)))
(concat "a" (capitalize (match-string-no-properties 1 text))))
"arg"))
(defun yas/objc-guess-member-name (text)
"Turns FOOBARBaz to baz"
(let ((case-fold-search nil))
(if (string-match "[A-Z]+\\([A-Z]\\)\\(.*\\)" text)
(concat (downcase (match-string-no-properties 1 text))
(match-string-no-properties 2 text))
text)))
;;; cached conditions
(yas/define-condition-cache (yas/define-condition-cache
yas/objc-interface-p yas/objc-interface-p
"Non-nil if point inside an objc @interface declaration." "Non-nil if point inside an objc @interface declaration."
@ -11,10 +31,10 @@
(yas/define-condition-cache (yas/define-condition-cache
yas/objc-method-body-p yas/objc-method-body-p
"Non-nil if point inside an objc @implementation declaration." "Non-nil if point inside an objc method definition."
(yas/objc-in-c-block-like 'objc-method-intro)) (yas/objc-in-c-block-like 'objc-method-intro))
;;; helpers for cached conditions
(defun yas/objc-in-c-block-like (symbol-or-regexp) (defun yas/objc-in-c-block-like (symbol-or-regexp)
(let ((original-point (point)) (let ((original-point (point))
(start-point nil)) (start-point nil))

View File

@ -2,6 +2,7 @@
# key: log # key: log
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: NSLog(…) # name: NSLog(…)
## condition: "source.objc, source.objc++" # condition: (and (yas/objc-implementation-p) (yas/objc-method-body-p))
# -- # --
NSLog(@"$1"${1/[^%]*(%)?.*/(?1:, :\);)/}$2${1/[^%]*(%)?.*/(?1:\);)/} NSLog(@"${1:%@}"${1:$(if (string-match "%" text) ", " ");")
}$2${1:$(if (string-match "%" text) ");" "")}$0

View File

@ -2,10 +2,9 @@
# key: m # key: m
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: Method # name: Method
## binding: "^M" # binding: C-c m
## condition: "(source.objc | source.objc++) & meta.scope.implementation.objc - meta.function-with-body" # condition: (and (yas/objc-implementation-p) (not (yas/objc-method-body-p)))
# -- # --
- (${1:id})${2:${TM_SELECTED_TEXT:method}}${3::(${4:id})${5:${4/(NS([AEIOQUY])?(\w+).*)|(.)?.*/(?1:a(?2:n$2)$3:(?4:anArgument))/}}} - (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
{$0${1/^(void|IBAction)$|(.*)/(?2: yas/objc-guess-instance-name yas/text)}}} {$0${1:$(if (
return nil;)/} string-match yas/objc-void-regexp text) "}" "\n return nil;\n}")}
}

View File

@ -2,10 +2,10 @@
# key: sm # key: sm
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: Sub-method (Call Super) # name: Sub-method (Call Super)
## condition: "(source.objc | source.objc++) & meta.scope.implementation.objc - meta.function-with-body" # condition: (and (yas/objc-implementation-p) (not (yas/objc-method-body-p)))
# -- # --
- (${1:id})${2:method}${3::(${4:id})${5:${4/(NS([AEIOQUY])?(\w+).*)|(.)?.*/(?1:a(?2:n$2)$3:(?4:anArgument))/}}} - (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
{ yas/objc-guess-instance-name yas/text)}}} {
${1/^(void|IBAction)$|(.*)/(?2:$2 res = )/}[super ${2:method}${5/.+/:$0/}];$0${1/^(void|IBAction)$|(.*)/(?2: ${1:$(if (string-match yas/objc-void-regexp text) "" "res = ")}[super $2${5:$(
return res;)/} if (string= yas/text "") "" (concat ":" yas/text))}];${1:$(if (string-match yas/objc-void-regexp text) "" "\n return res;")}
} }

View File

@ -2,9 +2,8 @@
# key: M # key: M
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: Class Method # name: Class Method
## condition: "(source.objc | source.objc++) & meta.scope.implementation.objc - meta.function-with-body" # condition: (and (yas/objc-implementation-p) (not (yas/objc-method-body-p)))
# -- # --
+ (${1:id})${2:method}${3::(${4:id})${5:${4/(NS([AEIOQUY])?(\w+).*)|(.)?.*/(?1:a(?2:n$2)$3:(?4:anArgument))/}}} + (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
{$0${1/^(void|IBAction)$|(.*)/(?2: yas/objc-guess-instance-name yas/text)}}} {$0${1:$(if (
return nil;)/} string-match yas/objc-void-regexp text) "}" "\n return nil;\n}")}
}

View File

@ -2,6 +2,6 @@
# key: ibo # key: ibo
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: IBOutlet # name: IBOutlet
## condition: "source.objc, source.objc++" # condition: (yas/objc-interface-p)
# -- # --
IBOutlet ${1:NSSomeClass}${TM_C_POINTER: *}${2:${1/^[A-Z](?:[A-Z]+|[a-z]+)([A-Z]\w*)/\l$1/}}; IBOutlet ${1:NSSomeClass}*${2:${1:$(yas/objc-guess-member-name yas/text)}};

View File

@ -2,7 +2,7 @@
# key: I # key: I
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: Method: Initialize # name: Method: Initialize
## condition: "(source.objc | source.objc++) & meta.scope.implementation.objc - meta.function-with-body" # condition: (and (yas/objc-implementation-p) (not (yas/objc-method-body-p)))
# -- # --
+ (void)initialize + (void)initialize
{ {

View File

@ -2,7 +2,7 @@
# key: m # key: m
# contributor: Translated from TextMate Snippet # contributor: Translated from TextMate Snippet
# name: Interface: Method # name: Interface: Method
## binding: "^M" # binding: "C-c m"
## condition: "source.objc meta.scope.interface, source.objc++ meta.scope.interface" # condition: (yas/objc-interface-p)
# -- # --
- (${1:id})${2:${TM_SELECTED_TEXT:method}}${3::(${4:id})${5:${4/(NS([AEIOQUY])?(\w+).*)|(.)?.*/(?1:a(?2:n$2)$3:(?4:anArgument))/}}}; - (${1:id})${2:${TM_SELECTED_TEXT:method}}${3::(${4:id})${5:${4/(NS([AEIOQUY])?(\w+).*)|(.)?.*/(?1:a(?2:n$2)$3:(?4:anArgument))/}}};

View File

@ -1,7 +0,0 @@
# -*- mode: snippet -*-
# key: log
# contributor: Translated from TextMate Snippet
# name: NSLog(.., _cmd)
## condition: "source.objc meta.scope.implementation, source.objc++ meta.scope.implementation"
# --
NSLog(@"%s$1", _cmd${1/[^%]*(%)?.*/(?1:, :\);)/}$2${1/[^%]*(%)?.*/(?1:\);)/}