2

In this case the basic offset is 4 and tabs mode is enabled.

For example I am getting:

if (! (true // Problem when the value starts inline.
        && false)) {} // I get two tabs, one per '('.

if (! (
    true // No problem when value does not start inline.
    && false)) {} // I get one tab as wanted.

I get one tab per (, but since they are inline, I want just one tab:

if (! (true // Problem solved.
    && false)) {} // One tab.

if (! (
    true // No problem.
    && false)) {} // One tab.

This is how I style my code:

(c-add-style
 "MyStylePHP"
 `((c-basic-offset . 4)
   (c-offsets-alist . (
                       (arglist-close . php-lineup-arglist-close)
                       (arglist-cont . (first php-lineup-cascaded-calls 0))
                       (arglist-cont-nonempty . +)
                       (arglist-intro . php-lineup-arglist-intro)
                       (case-label . +)
                       (class-open . 0)
                       (comment-intro . 0)
                       (inlambda . 0)
                       (inline-open . 0)
                       (namespace-open . 0)
                       (lambda-intro-cont . +)
                       (label . +)
                       (statement-cont . (first
                                          php-lineup-cascaded-calls
                                          php-lineup-string-cont
                                          php-lineup-hanging-semicolon +))
                       (substatement-open . 0)
                       (topmost-intro-cont . (first
                                              php-lineup-cascaded-calls +))))
   (c-indent-comments-syntactically-p . t)
   (indent-tabs-mode . t)
   (tab-width . ,(default-value 'tab-width))
   (fill-column . ,(default-value 'fill-column))
   (show-trailing-whitespace . ,(default-value 'show-trailing-whitespace))
   (php-style-delete-trailing-whitespace . nil)))

(add-hook
 'php-mode-hook
 '(lambda ()
    (c-set-style "MyStylePHP")))
mikl
  • 413
  • 3
  • 19

1 Answers1

1

If the lineup function my-php-lineup-arglist-cont below is registered for the indentation of arglist-cont it fetches the indentation of the preceeding function statement and adds one times c-basic-offset.

Use my-php-lineup-arglist-cont as a replacement for php-lineup-cascaded-calls in the entry for arglist-cont-nonempty in your c-offsets-alist.

(require 'subr-x)
(defun my-php-lineup-arglist-cont (_langelem)
  "Indent continued arglists relatively with one `c-basic-offset'."
  (when-let ((state (car (c-guess-basic-syntax)))
         (pos (c-langelem-pos state)))
    (save-excursion
      (goto-char pos)
      (vector (+
           c-basic-offset
           (current-column))))))
Tobias
  • 32,569
  • 1
  • 34
  • 75
  • I get the error "Symbol's function definition is void: when-let" – mikl Jun 28 '19 at 18:17
  • 1
    @mikl Sorry, I added `(require 'subr-x)`. That should solve the problem. Note that the `require` should be wrapped with `eval-when-compile` in code that is byte compiled. `when-let` is a macro. – Tobias Jun 28 '19 at 18:19
  • Yes it works now, awesome! thanks! – mikl Jun 28 '19 at 18:25