Enhancements for Objective-C:
cc-vars.el (c-objc-method-arg-min-delta-to-bracket, c-objc-method-arg-unfinished-offset, c-objc-method-parameter-offset): New variables. (c-offsets-alist): Use c-lineup-ObjC-method-call-colons in entry for objc-method-call-cont. cc-langs.el (c-constant-kwds): New ObjC keywords "YES", "NO", "NS_DURING", "NS_HANDLER", "NS_ENDHANDLER". cc-align.el (c-lineup-ObjC-method-call-colons): New function.
This commit is contained in:
parent
9e95e9f4b5
commit
f0e4b2f240
3 changed files with 84 additions and 4 deletions
|
@ -907,8 +907,48 @@ Works with: objc-method-call-cont."
|
|||
)
|
||||
(- target-col open-bracket-col extra))))
|
||||
|
||||
(defun c-lineup-ObjC-method-call-colons (langelem)
|
||||
"Line up selector args as Project Builder / XCode: colons of first
|
||||
selector portions on successive lines are aligned. If no decision can
|
||||
be made return NIL, so that other lineup methods can be tried. This is
|
||||
typically chained with `c-lineup-ObjC-method-call'.
|
||||
|
||||
Works with: objc-method-call-cont."
|
||||
(save-excursion
|
||||
(catch 'no-idea
|
||||
(let* ((method-arg-len (progn
|
||||
(back-to-indentation)
|
||||
(if (search-forward ":" (c-point 'eol) 'move)
|
||||
(- (point) (c-point 'boi))
|
||||
; no complete argument to indent yet
|
||||
(throw 'no-idea nil))))
|
||||
|
||||
(extra (save-excursion
|
||||
; indent parameter to argument if needed
|
||||
(back-to-indentation)
|
||||
(c-backward-syntactic-ws (c-langelem-pos langelem))
|
||||
(if (eq ?: (char-before))
|
||||
c-objc-method-parameter-offset 0)))
|
||||
|
||||
(open-bracket-col (c-langelem-col langelem))
|
||||
|
||||
(arg-ralign-colon-ofs (progn
|
||||
(forward-char) ; skip over '['
|
||||
; skip over object/class name
|
||||
; and first argument
|
||||
(c-forward-sexp 2)
|
||||
(if (search-forward ":" (c-point 'eol) 'move)
|
||||
(- (current-column) open-bracket-col
|
||||
method-arg-len extra)
|
||||
; previous arg has no param
|
||||
c-objc-method-arg-unfinished-offset))))
|
||||
|
||||
(if (>= arg-ralign-colon-ofs c-objc-method-arg-min-delta-to-bracket)
|
||||
(+ arg-ralign-colon-ofs extra)
|
||||
(throw 'no-idea nil))))))
|
||||
|
||||
(defun c-lineup-ObjC-method-args (langelem)
|
||||
"Line up the colons that separate args.
|
||||
"Line up the colons that separate args in a method declaration.
|
||||
The colon on the current line is aligned with the one on the first
|
||||
line.
|
||||
|
||||
|
@ -932,7 +972,7 @@ Works with: objc-method-args-cont."
|
|||
c-basic-offset)))))
|
||||
|
||||
(defun c-lineup-ObjC-method-args-2 (langelem)
|
||||
"Line up the colons that separate args.
|
||||
"Line up the colons that separate args in a method declaration.
|
||||
The colon on the current line is aligned with the one on the previous
|
||||
line.
|
||||
|
||||
|
|
|
@ -2149,7 +2149,7 @@ This construct is \"<keyword> <expression> :\"."
|
|||
t nil
|
||||
(c c++) '("NULL" ;; Not a keyword, but practically works as one.
|
||||
"false" "true") ; Defined in C99.
|
||||
objc '("nil" "Nil")
|
||||
objc '("nil" "Nil" "YES" "NO" "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER")
|
||||
idl '("TRUE" "FALSE")
|
||||
java '("true" "false" "null") ; technically "literals", not keywords
|
||||
pike '("UNDEFINED")) ;; Not a keyword, but practically works as one.
|
||||
|
|
|
@ -936,6 +936,45 @@ this variable to nil."
|
|||
:type 'integer
|
||||
:group 'c)
|
||||
|
||||
(defcustom c-objc-method-arg-min-delta-to-bracket 2
|
||||
"*Minimum number of chars to the opening bracket.
|
||||
|
||||
Consider this ObjC snippet:
|
||||
|
||||
[foo blahBlah: fred
|
||||
|<-x->|barBaz: barney
|
||||
|
||||
If `x' is less than this number then `c-lineup-ObjC-method-call-colons'
|
||||
will defer the indentation decision to the next function. By default
|
||||
this is `c-lineup-ObjC-method-call', which would align it like:
|
||||
|
||||
[foo blahBlahBlah: fred
|
||||
thisIsTooDamnLong: barney
|
||||
|
||||
This behaviour can be overridden by customizing the indentation of
|
||||
`objc-method-call-cont' in the \"objc\" style."
|
||||
:type 'integer
|
||||
:group 'c)
|
||||
|
||||
(defcustom c-objc-method-arg-unfinished-offset 4
|
||||
"*Offset relative to bracket if first selector is on a new line.
|
||||
|
||||
[aaaaaaaaa
|
||||
|<-x->|bbbbbbb: cccccc
|
||||
ddddd: eeee];"
|
||||
:type 'integer
|
||||
:group 'c)
|
||||
|
||||
(defcustom c-objc-method-parameter-offset 4
|
||||
"*Offset for selector parameter on a new line (relative to first selector.
|
||||
|
||||
[aaaaaaa bbbbbbbbbb:
|
||||
|<-x->|cccccccc
|
||||
ddd: eeee
|
||||
ffff: ggg];"
|
||||
:type 'integer
|
||||
:group 'c)
|
||||
|
||||
(defcustom c-default-style '((java-mode . "java") (awk-mode . "awk")
|
||||
(other . "gnu"))
|
||||
"*Style which gets installed by default when a file is visited.
|
||||
|
@ -1121,7 +1160,8 @@ can always override the use of `c-default-style' by making calls to
|
|||
;; Anchor pos: Boi.
|
||||
(objc-method-args-cont . c-lineup-ObjC-method-args)
|
||||
;; Anchor pos: At the method start (always at boi).
|
||||
(objc-method-call-cont . c-lineup-ObjC-method-call)
|
||||
(objc-method-call-cont . (c-lineup-ObjC-method-call-colons
|
||||
c-lineup-ObjC-method-call +))
|
||||
;; Anchor pos: At the open bracket.
|
||||
(extern-lang-open . 0)
|
||||
(namespace-open . 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue