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/objc-interface-p
"Non-nil if point inside an objc @interface declaration."
@ -11,10 +31,10 @@
(yas/define-condition-cache
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))
;;; helpers for cached conditions
(defun yas/objc-in-c-block-like (symbol-or-regexp)
(let ((original-point (point))
(start-point nil))

View File

@ -2,6 +2,7 @@
# key: log
# contributor: Translated from TextMate Snippet
# 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
# contributor: Translated from TextMate Snippet
# name: Method
## binding: "^M"
## condition: "(source.objc | source.objc++) & meta.scope.implementation.objc - meta.function-with-body"
# binding: C-c m
# 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))/}}}
{$0${1/^(void|IBAction)$|(.*)/(?2:
return nil;)/}
}
- (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
yas/objc-guess-instance-name yas/text)}}} {$0${1:$(if (
string-match yas/objc-void-regexp text) "}" "\n return nil;\n}")}

View File

@ -2,10 +2,10 @@
# key: sm
# contributor: Translated from TextMate Snippet
# 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/^(void|IBAction)$|(.*)/(?2:$2 res = )/}[super ${2:method}${5/.+/:$0/}];$0${1/^(void|IBAction)$|(.*)/(?2:
return res;)/}
- (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
yas/objc-guess-instance-name yas/text)}}} {
${1:$(if (string-match yas/objc-void-regexp text) "" "res = ")}[super $2${5:$(
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
# contributor: Translated from TextMate Snippet
# 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))/}}}
{$0${1/^(void|IBAction)$|(.*)/(?2:
return nil;)/}
}
+ (${1:id})${2:`(or yas/selected-text "method")`}${3::(${4:id})${5:${4:$(
yas/objc-guess-instance-name yas/text)}}} {$0${1:$(if (
string-match yas/objc-void-regexp text) "}" "\n return nil;\n}")}

View File

@ -2,6 +2,6 @@
# key: ibo
# contributor: Translated from TextMate Snippet
# 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
# contributor: Translated from TextMate Snippet
# 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
{

View File

@ -2,7 +2,7 @@
# key: m
# contributor: Translated from TextMate Snippet
# name: Interface: Method
## binding: "^M"
## condition: "source.objc meta.scope.interface, source.objc++ meta.scope.interface"
# binding: "C-c m"
# 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))/}}};

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:\);)/}