Function: verilog-cparenexp-indent-level

verilog-cparenexp-indent-level is a byte-compiled function defined in verilog-mode.el.gz.

Signature

(verilog-cparenexp-indent-level)

Documentation

Return indent level for current line inside a parenthetical expression.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
(defun verilog-cparenexp-indent-level ()
  "Return indent level for current line inside a parenthetical expression."
  (let ((start-pos (point))
        (close-par (looking-at "[)}]"))
        pos pos-arg-paren)
    (save-excursion
      (verilog-backward-up-list 1)
      (if verilog-indent-lists
          (progn
            (forward-char 1)
            (skip-chars-forward " \t")
            (current-column))
        ;; Indentation with `verilog-indent-lists' set to nil
        (verilog-beg-of-statement-1)
        (when (looking-at "\\<\\(function\\|task\\)\\>")
          (verilog-beg-of-statement)) ; find virtual/protected/static
        (cond (;; 1) Closing ); of a module/function/task
               (and close-par
                    (save-excursion
                      (verilog-beg-of-statement-1)
                      (or (looking-at verilog-complete-re)
                          (progn (beginning-of-line)
                                 (not (looking-at verilog-assignment-operation-re))))))
               (current-column))
              (;; 2) if (condition)
               (looking-at "(")
               (forward-char 1)
               (skip-chars-forward " \t\f" (point-at-eol))
               (current-column))
              (;; 3) Inside a module/defun param list or function/task argument list
               (or (looking-at verilog-defun-level-re)
                   (looking-at "\\(\\<\\(virtual\\|protected\\|static\\)\\>\\s-+\\)?\\(\\<task\\>\\|\\<function\\>\\)"))
               (setq pos-arg-paren (save-excursion
                                     (goto-char start-pos)
                                     (verilog-backward-up-list 1)
                                     (forward-char)
                                     (skip-chars-forward " \t")
                                     (when (not (eolp))
                                       (current-column))))
               (or pos-arg-paren
                   ;; arg in next line after (
                   (+ (current-column) verilog-indent-level)))
              (;; 4) Assignment operation
               (save-excursion
                 (beginning-of-line)
                 (and (looking-at verilog-assignment-operation-re)
                      (save-excursion
                        (goto-char (match-beginning 2))
                        (not (verilog-within-string)))
                      (progn (verilog-forward-syntactic-ws)
                             (not (looking-at verilog-complete-re)))))
               (goto-char (match-end 2))
               (skip-chars-forward " \t\f" (point-at-eol))
               (skip-chars-forward "{(" (1+ (point)))
               (skip-chars-forward " \t\f" (point-at-eol))
               (current-column))
              (;; 5) Typedef enum declaration
               (verilog-at-enum-decl-p)
               (verilog-re-search-forward "{" (verilog-pos-at-end-of-statement) t)
               (if (> (verilog-pos-at-forward-syntactic-ws) (point-at-eol))
                   (+ (verilog-col-at-beg-of-statement) verilog-indent-level)
                 (verilog-col-at-forward-syntactic-ws)))
              (;; 6) Long reporting strings (e.g. $display or $sformatf inside `uvm_info)
               (save-excursion
                 (goto-char start-pos)
                 (verilog-backward-up-list 1)
                 (setq pos (1+ (point)))
                 (backward-word)
                 (or (looking-at (concat "\\$" verilog-identifier-re)) ; System function/task
                     (looking-at verilog-uvm-statement-re)))         ; `uvm_* macros
               (goto-char pos)
               (current-column))
              (t ;; 7) Default
               (+ (current-column) verilog-indent-level)))))))