Refactor: rename verilog-align-ports-* to verilog-align-*

This commit is contained in:
2026-02-08 13:55:07 +03:00
parent 508ebdc8e6
commit dd3ce4977e
4 changed files with 89 additions and 89 deletions

View File

@@ -1,20 +1,20 @@
# verilog-align-ports # verilog-align
Align SystemVerilog ANSI-style port declarations in a contiguous block around point. Align SystemVerilog port declarations, instantiations, and signal declarations around point.
## Features ## Features
- Aligns direction, type, range, name, and trailing `//` comments. - Aligns direction, type, range, name, and trailing `//` comments.
- Works on the contiguous block of port declarations above and below point. - Works on the contiguous block of port declarations above and below point.
- Stops at the first non-port line (including blank lines). - Stops at the first non-port line (including blank lines).
- Aligns named port connections in module instantiations via `verilog-align-ports-instantiation`. - Aligns named port connections in module instantiations via `verilog-align-instantiation`.
- Aligns signal declarations via `verilog-align-ports-declarations`. - Aligns signal declarations via `verilog-align-declarations`.
## Installation ## Installation
```elisp ```elisp
(add-to-list 'load-path "/path/to/verilog-align-ports") (add-to-list 'load-path "/path/to/verilog-align")
(require 'verilog-align-ports) (require 'verilog-align)
``` ```
## Usage ## Usage
@@ -25,12 +25,12 @@ Align SystemVerilog ANSI-style port declarations in a contiguous block around po
For module instantiations: For module instantiations:
1. Place point on a named port connection line (e.g., `.clk_i (clk)` or `.full_o,`). 1. Place point on a named port connection line (e.g., `.clk_i (clk)` or `.full_o,`).
2. Run `M-x verilog-align-ports-instantiation`. 2. Run `M-x verilog-align-instantiation`.
For signal declarations: For signal declarations:
1. Place point on a declaration line (e.g., `logic foo;` or `wire [3:0] bar;`). 1. Place point on a declaration line (e.g., `logic foo;` or `wire [3:0] bar;`).
2. Run `M-x verilog-align-ports-declarations`. 2. Run `M-x verilog-align-declarations`.
Example input: Example input:

View File

@@ -3,5 +3,5 @@ set -euo pipefail
emacs -batch \ emacs -batch \
-l ert \ -l ert \
-l verilog-align-ports-test.el \ -l verilog-align-test.el \
-f ert-run-tests-batch-and-exit -f ert-run-tests-batch-and-exit

View File

@@ -1,17 +1,17 @@
;;; verilog-align-ports-test.el --- Tests for verilog-align-ports -*- lexical-binding: t; -*- ;;; verilog-align-test.el --- Tests for verilog-align -*- lexical-binding: t; -*-
;;; Commentary: ;;; Commentary:
;; ERT tests for verilog-align-ports. ;; ERT tests for verilog-align.
;;; Code: ;;; Code:
(require 'ert) (require 'ert)
(defconst verilog-align-ports-test--dir (defconst verilog-align-test--dir
(file-name-directory (or load-file-name buffer-file-name))) (file-name-directory (or load-file-name buffer-file-name)))
(load-file (expand-file-name "verilog-align-ports.el" (load-file (expand-file-name "verilog-align.el"
verilog-align-ports-test--dir)) verilog-align-test--dir))
(ert-deftest verilog-align-ports-aligns-block () (ert-deftest verilog-align-ports-aligns-block ()
(let* ((input (concat (let* ((input (concat
@@ -66,7 +66,7 @@
(verilog-align-ports) (verilog-align-ports)
(should (string= (buffer-string) expected))))) (should (string= (buffer-string) expected)))))
(ert-deftest verilog-align-ports-instantiation-aligns-block () (ert-deftest verilog-align-instantiation-aligns-block ()
(let* ((input (concat (let* ((input (concat
(mapconcat (mapconcat
#'identity #'identity
@@ -121,10 +121,10 @@
(goto-char (point-min)) (goto-char (point-min))
(search-forward ".clk_i") (search-forward ".clk_i")
(beginning-of-line) (beginning-of-line)
(should (verilog-align-ports-instantiation)) (should (verilog-align-instantiation))
(should (string= (buffer-string) expected))))) (should (string= (buffer-string) expected)))))
(ert-deftest verilog-align-ports-instantiation-returns-nil-outside () (ert-deftest verilog-align-instantiation-returns-nil-outside ()
(with-temp-buffer (with-temp-buffer
(insert (concat (insert (concat
(mapconcat (mapconcat
@@ -138,9 +138,9 @@
(goto-char (point-min)) (goto-char (point-min))
(search-forward "dut (") (search-forward "dut (")
(beginning-of-line) (beginning-of-line)
(should (not (verilog-align-ports-instantiation))))) (should (not (verilog-align-instantiation)))))
(ert-deftest verilog-align-ports-declarations-aligns-block () (ert-deftest verilog-align-declarations-aligns-block ()
(let* ((input (concat (let* ((input (concat
(mapconcat (mapconcat
#'identity #'identity
@@ -184,10 +184,10 @@
(goto-char (point-min)) (goto-char (point-min))
(search-forward "logic full_o") (search-forward "logic full_o")
(beginning-of-line) (beginning-of-line)
(should (verilog-align-ports-declarations)) (should (verilog-align-declarations))
(should (string= (buffer-string) expected))))) (should (string= (buffer-string) expected)))))
(ert-deftest verilog-align-ports-declarations-returns-nil-outside () (ert-deftest verilog-align-declarations-returns-nil-outside ()
(with-temp-buffer (with-temp-buffer
(insert (concat (insert (concat
(mapconcat (mapconcat
@@ -200,8 +200,8 @@
(goto-char (point-min)) (goto-char (point-min))
(search-forward "module foo") (search-forward "module foo")
(beginning-of-line) (beginning-of-line)
(should (not (verilog-align-ports-declarations))))) (should (not (verilog-align-declarations)))))
(provide 'verilog-align-ports-test) (provide 'verilog-align-test)
;;; verilog-align-ports-test.el ends here ;;; verilog-align-test.el ends here

View File

@@ -1,14 +1,14 @@
;;; verilog-align-ports.el --- Align SystemVerilog port declarations -*- lexical-binding: t; -*- ;;; verilog-align.el --- Align SystemVerilog port declarations -*- lexical-binding: t; -*-
;;; Commentary: ;;; Commentary:
;; Align SystemVerilog ANSI-style port declarations in a contiguous block. ;; Align SystemVerilog port declarations, instantiations, and signal declarations.
;;; Code: ;;; Code:
(require 'cl-lib) (require 'cl-lib)
(require 'subr-x) (require 'subr-x)
(defun verilog-align-ports--line-port-p (pos) (defun verilog-align--line-port-p (pos)
(save-excursion (save-excursion
(goto-char pos) (goto-char pos)
(let ((line (buffer-substring-no-properties (let ((line (buffer-substring-no-properties
@@ -16,7 +16,7 @@
(line-end-position)))) (line-end-position))))
(string-match-p "^\\s-*\\(input\\|output\\|inout\\)\\b" line)))) (string-match-p "^\\s-*\\(input\\|output\\|inout\\)\\b" line))))
(defun verilog-align-ports--line-inst-port-p (pos) (defun verilog-align--line-inst-port-p (pos)
(save-excursion (save-excursion
(goto-char pos) (goto-char pos)
(let ((line (buffer-substring-no-properties (let ((line (buffer-substring-no-properties
@@ -26,7 +26,7 @@
"^\\s-*\\.\\(\\\\[^[:space:]]+\\|[A-Za-z_][A-Za-z0-9_$]*\\)\\b" "^\\s-*\\.\\(\\\\[^[:space:]]+\\|[A-Za-z_][A-Za-z0-9_$]*\\)\\b"
line)))) line))))
(defun verilog-align-ports--line-decl-p (pos) (defun verilog-align--line-decl-p (pos)
(save-excursion (save-excursion
(goto-char pos) (goto-char pos)
(let ((line (buffer-substring-no-properties (let ((line (buffer-substring-no-properties
@@ -35,16 +35,16 @@
(and (string-match-p (and (string-match-p
"^\\s-*\\(logic\\|wire\\|reg\\)\\b" "^\\s-*\\(logic\\|wire\\|reg\\)\\b"
line) line)
(verilog-align-ports--parse-decl-line line))))) (verilog-align--parse-decl-line line)))))
(defun verilog-align-ports--split-comment (line) (defun verilog-align--split-comment (line)
(let ((pos (string-match "//" line))) (let ((pos (string-match "//" line)))
(if pos (if pos
(cons (substring line 0 pos) (substring line pos)) (cons (substring line 0 pos) (substring line pos))
(cons line nil)))) (cons line nil))))
(defun verilog-align-ports--parse-line (line) (defun verilog-align--parse-line (line)
(let* ((split (verilog-align-ports--split-comment line)) (let* ((split (verilog-align--split-comment line))
(code (string-trim-right (car split))) (code (string-trim-right (car split)))
(comment (cdr split))) (comment (cdr split)))
(when (string-match (when (string-match
@@ -86,67 +86,67 @@
:comma comma :comma comma
:comment comment))))) :comment comment)))))
(defun verilog-align-ports--bounds () (defun verilog-align--bounds ()
(save-excursion (save-excursion
(and (verilog-align-ports--line-port-p (line-beginning-position)) (and (verilog-align--line-port-p (line-beginning-position))
(let ((start (line-beginning-position)) (let ((start (line-beginning-position))
(end nil)) (end nil))
(while (and (not (bobp)) (while (and (not (bobp))
(save-excursion (save-excursion
(forward-line -1) (forward-line -1)
(verilog-align-ports--line-port-p (verilog-align--line-port-p
(line-beginning-position)))) (line-beginning-position))))
(forward-line -1) (forward-line -1)
(setq start (line-beginning-position))) (setq start (line-beginning-position)))
(goto-char start) (goto-char start)
(while (and (not (eobp)) (while (and (not (eobp))
(verilog-align-ports--line-port-p (verilog-align--line-port-p
(line-beginning-position))) (line-beginning-position)))
(forward-line 1)) (forward-line 1))
(setq end (line-beginning-position)) (setq end (line-beginning-position))
(cons start end))))) (cons start end)))))
(defun verilog-align-ports--inst-bounds () (defun verilog-align--inst-bounds ()
(save-excursion (save-excursion
(and (verilog-align-ports--line-inst-port-p (line-beginning-position)) (and (verilog-align--line-inst-port-p (line-beginning-position))
(let ((start (line-beginning-position)) (let ((start (line-beginning-position))
(end nil)) (end nil))
(while (and (not (bobp)) (while (and (not (bobp))
(save-excursion (save-excursion
(forward-line -1) (forward-line -1)
(verilog-align-ports--line-inst-port-p (verilog-align--line-inst-port-p
(line-beginning-position)))) (line-beginning-position))))
(forward-line -1) (forward-line -1)
(setq start (line-beginning-position))) (setq start (line-beginning-position)))
(goto-char start) (goto-char start)
(while (and (not (eobp)) (while (and (not (eobp))
(verilog-align-ports--line-inst-port-p (verilog-align--line-inst-port-p
(line-beginning-position))) (line-beginning-position)))
(forward-line 1)) (forward-line 1))
(setq end (line-beginning-position)) (setq end (line-beginning-position))
(cons start end))))) (cons start end)))))
(defun verilog-align-ports--decl-bounds () (defun verilog-align--decl-bounds ()
(save-excursion (save-excursion
(and (verilog-align-ports--line-decl-p (line-beginning-position)) (and (verilog-align--line-decl-p (line-beginning-position))
(let ((start (line-beginning-position)) (let ((start (line-beginning-position))
(end nil)) (end nil))
(while (and (not (bobp)) (while (and (not (bobp))
(save-excursion (save-excursion
(forward-line -1) (forward-line -1)
(verilog-align-ports--line-decl-p (verilog-align--line-decl-p
(line-beginning-position)))) (line-beginning-position))))
(forward-line -1) (forward-line -1)
(setq start (line-beginning-position))) (setq start (line-beginning-position)))
(goto-char start) (goto-char start)
(while (and (not (eobp)) (while (and (not (eobp))
(verilog-align-ports--line-decl-p (verilog-align--line-decl-p
(line-beginning-position))) (line-beginning-position)))
(forward-line 1)) (forward-line 1))
(setq end (line-beginning-position)) (setq end (line-beginning-position))
(cons start end))))) (cons start end)))))
(defun verilog-align-ports--collect (start end) (defun verilog-align--collect (start end)
(let (entries) (let (entries)
(save-excursion (save-excursion
(goto-char start) (goto-char start)
@@ -154,13 +154,13 @@
(let* ((line (buffer-substring-no-properties (let* ((line (buffer-substring-no-properties
(line-beginning-position) (line-beginning-position)
(line-end-position))) (line-end-position)))
(entry (verilog-align-ports--parse-line line))) (entry (verilog-align--parse-line line)))
(when entry (when entry
(push entry entries))) (push entry entries)))
(forward-line 1))) (forward-line 1)))
(nreverse entries))) (nreverse entries)))
(defun verilog-align-ports--find-paren-end (text start) (defun verilog-align--find-paren-end (text start)
(let ((depth 0) (let ((depth 0)
(idx start) (idx start)
(len (length text)) (len (length text))
@@ -176,8 +176,8 @@
(setq idx (1+ idx))) (setq idx (1+ idx)))
end)) end))
(defun verilog-align-ports--parse-inst-line (line) (defun verilog-align--parse-inst-line (line)
(let* ((split (verilog-align-ports--split-comment line)) (let* ((split (verilog-align--split-comment line))
(code (string-trim-right (car split))) (code (string-trim-right (car split)))
(comment (cdr split))) (comment (cdr split)))
(when (string-match (when (string-match
@@ -192,7 +192,7 @@
(conn "") (conn "")
(comma nil)) (comma nil))
(if (and pos (< pos (length rest)) (eq (aref rest pos) ?\()) (if (and pos (< pos (length rest)) (eq (aref rest pos) ?\())
(let* ((end (verilog-align-ports--find-paren-end rest pos))) (let* ((end (verilog-align--find-paren-end rest pos)))
(if end (if end
(progn (progn
(setq has-conn t) (setq has-conn t)
@@ -216,8 +216,8 @@
:comma comma :comma comma
:comment comment))))) :comment comment)))))
(defun verilog-align-ports--parse-decl-line (line) (defun verilog-align--parse-decl-line (line)
(let* ((split (verilog-align-ports--split-comment line)) (let* ((split (verilog-align--split-comment line))
(code (string-trim-right (car split))) (code (string-trim-right (car split)))
(comment (cdr split))) (comment (cdr split)))
(when (string-match (when (string-match
@@ -260,7 +260,7 @@
:tail tail :tail tail
:comment comment)))))))) :comment comment))))))))
(defun verilog-align-ports--inst-collect (start end) (defun verilog-align--inst-collect (start end)
(let (entries) (let (entries)
(save-excursion (save-excursion
(goto-char start) (goto-char start)
@@ -268,13 +268,13 @@
(let* ((line (buffer-substring-no-properties (let* ((line (buffer-substring-no-properties
(line-beginning-position) (line-beginning-position)
(line-end-position))) (line-end-position)))
(entry (verilog-align-ports--parse-inst-line line))) (entry (verilog-align--parse-inst-line line)))
(when entry (when entry
(push entry entries))) (push entry entries)))
(forward-line 1))) (forward-line 1)))
(nreverse entries))) (nreverse entries)))
(defun verilog-align-ports--decl-collect (start end) (defun verilog-align--decl-collect (start end)
(let (entries) (let (entries)
(save-excursion (save-excursion
(goto-char start) (goto-char start)
@@ -282,13 +282,13 @@
(let* ((line (buffer-substring-no-properties (let* ((line (buffer-substring-no-properties
(line-beginning-position) (line-beginning-position)
(line-end-position))) (line-end-position)))
(entry (verilog-align-ports--parse-decl-line line))) (entry (verilog-align--parse-decl-line line)))
(when entry (when entry
(push entry entries))) (push entry entries)))
(forward-line 1))) (forward-line 1)))
(nreverse entries))) (nreverse entries)))
(defun verilog-align-ports--max-lengths (entries) (defun verilog-align--max-lengths (entries)
(let ((max-dir 0) (let ((max-dir 0)
(max-type 0) (max-type 0)
(max-range 0) (max-range 0)
@@ -305,12 +305,12 @@
(setq has-comment t))) (setq has-comment t)))
(list max-dir max-type max-range max-name has-comment))) (list max-dir max-type max-range max-name has-comment)))
(defun verilog-align-ports--pad (max-len len) (defun verilog-align--pad (max-len len)
(make-string (+ 1 (- max-len len)) ?\s)) (make-string (+ 1 (- max-len len)) ?\s))
(defun verilog-align-ports--format-lines (entries) (defun verilog-align--format-lines (entries)
(let* ((base-indent (plist-get (car entries) :indent)) (let* ((base-indent (plist-get (car entries) :indent))
(maxes (verilog-align-ports--max-lengths entries)) (maxes (verilog-align--max-lengths entries))
(max-dir (nth 0 maxes)) (max-dir (nth 0 maxes))
(max-type (nth 1 maxes)) (max-type (nth 1 maxes))
(max-range (nth 2 maxes)) (max-range (nth 2 maxes))
@@ -326,13 +326,13 @@
(name (concat (plist-get entry :name) (name (concat (plist-get entry :name)
(or (plist-get entry :comma) ""))) (or (plist-get entry :comma) "")))
(comment (plist-get entry :comment)) (comment (plist-get entry :comment))
(dir-pad (verilog-align-ports--pad max-dir (length dir))) (dir-pad (verilog-align--pad max-dir (length dir)))
(type-pad (when has-type (type-pad (when has-type
(verilog-align-ports--pad max-type (length type)))) (verilog-align--pad max-type (length type))))
(range-pad (when has-range (range-pad (when has-range
(verilog-align-ports--pad max-range (length range)))) (verilog-align--pad max-range (length range))))
(name-pad (when (and has-comment comment) (name-pad (when (and has-comment comment)
(verilog-align-ports--pad max-name (length name))))) (verilog-align--pad max-name (length name)))))
(concat base-indent (concat base-indent
dir dir
dir-pad dir-pad
@@ -345,7 +345,7 @@
(or comment "")))) (or comment ""))))
entries))) entries)))
(defun verilog-align-ports--inst-format-lines (entries) (defun verilog-align--inst-format-lines (entries)
(let* ((base-indent (plist-get (car entries) :indent)) (let* ((base-indent (plist-get (car entries) :indent))
(max-name 0) (max-name 0)
(has-comment nil) (has-comment nil)
@@ -363,7 +363,7 @@
(conn (plist-get entry :conn)) (conn (plist-get entry :conn))
(comma (plist-get entry :comma)) (comma (plist-get entry :comma))
(pad (when has-conn (pad (when has-conn
(verilog-align-ports--pad max-name (length name-field)))) (verilog-align--pad max-name (length name-field))))
(left (concat base-indent (left (concat base-indent
name-field name-field
(when has-conn pad) (when has-conn pad)
@@ -379,12 +379,12 @@
(let ((comment (plist-get entry :comment))) (let ((comment (plist-get entry :comment)))
(if (and has-comment comment) (if (and has-comment comment)
(concat left (concat left
(verilog-align-ports--pad max-left (length left)) (verilog-align--pad max-left (length left))
comment) comment)
left))) left)))
entries left-parts))) entries left-parts)))
(defun verilog-align-ports--decl-format-lines (entries) (defun verilog-align--decl-format-lines (entries)
(let* ((base-indent (plist-get (car entries) :indent)) (let* ((base-indent (plist-get (car entries) :indent))
(max-type 0) (max-type 0)
(max-range 0) (max-range 0)
@@ -402,9 +402,9 @@
(range (plist-get entry :range)) (range (plist-get entry :range))
(name (plist-get entry :name)) (name (plist-get entry :name))
(tail (plist-get entry :tail)) (tail (plist-get entry :tail))
(type-pad (verilog-align-ports--pad max-type (length type))) (type-pad (verilog-align--pad max-type (length type)))
(range-pad (when has-range (range-pad (when has-range
(verilog-align-ports--pad max-range (length range)))) (verilog-align--pad max-range (length range))))
(left (concat base-indent (left (concat base-indent
type type
type-pad type-pad
@@ -421,12 +421,12 @@
(let ((comment (plist-get entry :comment))) (let ((comment (plist-get entry :comment)))
(if (and has-comment comment) (if (and has-comment comment)
(concat left (concat left
(verilog-align-ports--pad max-left (length left)) (verilog-align--pad max-left (length left))
comment) comment)
left))) left)))
entries left-parts)))) entries left-parts))))
(defun verilog-align-ports--apply (start lines) (defun verilog-align--apply (start lines)
(save-excursion (save-excursion
(goto-char start) (goto-char start)
(dolist (line lines) (dolist (line lines)
@@ -438,44 +438,44 @@
(defun verilog-align-ports () (defun verilog-align-ports ()
"Align SystemVerilog port declarations around point." "Align SystemVerilog port declarations around point."
(interactive) (interactive)
(let ((bounds (verilog-align-ports--bounds))) (let ((bounds (verilog-align--bounds)))
(and bounds (and bounds
(let* ((start (car bounds)) (let* ((start (car bounds))
(end (cdr bounds)) (end (cdr bounds))
(entries (verilog-align-ports--collect start end))) (entries (verilog-align--collect start end)))
(and entries (and entries
(let ((lines (verilog-align-ports--format-lines entries))) (let ((lines (verilog-align--format-lines entries)))
(verilog-align-ports--apply start lines) (verilog-align--apply start lines)
t)))))) t))))))
;;;###autoload ;;;###autoload
(defun verilog-align-ports-instantiation () (defun verilog-align-instantiation ()
"Align SystemVerilog named port connections around point." "Align SystemVerilog named port connections around point."
(interactive) (interactive)
(let ((bounds (verilog-align-ports--inst-bounds))) (let ((bounds (verilog-align--inst-bounds)))
(and bounds (and bounds
(let* ((start (car bounds)) (let* ((start (car bounds))
(end (cdr bounds)) (end (cdr bounds))
(entries (verilog-align-ports--inst-collect start end))) (entries (verilog-align--inst-collect start end)))
(and entries (and entries
(let ((lines (verilog-align-ports--inst-format-lines entries))) (let ((lines (verilog-align--inst-format-lines entries)))
(verilog-align-ports--apply start lines) (verilog-align--apply start lines)
t)))))) t))))))
;;;###autoload ;;;###autoload
(defun verilog-align-ports-declarations () (defun verilog-align-declarations ()
"Align SystemVerilog signal declarations around point." "Align SystemVerilog signal declarations around point."
(interactive) (interactive)
(let ((bounds (verilog-align-ports--decl-bounds))) (let ((bounds (verilog-align--decl-bounds)))
(and bounds (and bounds
(let* ((start (car bounds)) (let* ((start (car bounds))
(end (cdr bounds)) (end (cdr bounds))
(entries (verilog-align-ports--decl-collect start end))) (entries (verilog-align--decl-collect start end)))
(and entries (and entries
(let ((lines (verilog-align-ports--decl-format-lines entries))) (let ((lines (verilog-align--decl-format-lines entries)))
(verilog-align-ports--apply start lines) (verilog-align--apply start lines)
t)))))) t))))))
(provide 'verilog-align-ports) (provide 'verilog-align)
;;; verilog-align-ports.el ends here ;;; verilog-align.el ends here