[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master d6d27bd 22/40: align: Reimplement d6086809
From: |
Daiki Ueno |
Subject: |
[elpa] master d6d27bd 22/40: align: Reimplement d6086809 |
Date: |
Fri, 22 Jan 2016 22:48:42 +0000 |
branch: master
commit d6d27bde98bd641b0ff639e9de0561ba3ed6f281
Author: Daiki Ueno <address@hidden>
Commit: Daiki Ueno <address@hidden>
align: Reimplement d6086809
---
gnome-align.el | 66 +++++++++++++++++++++++++++++++++++--------------------
gnome-tests.el | 45 ++++++++++++++++++++++++++++----------
2 files changed, 75 insertions(+), 36 deletions(-)
diff --git a/gnome-align.el b/gnome-align.el
index 7ac94aa..0b708d2 100644
--- a/gnome-align.el
+++ b/gnome-align.el
@@ -48,12 +48,14 @@
(cl-defstruct (gnome-align--argument
(:constructor nil)
(:constructor gnome-align--make-argument (type-start
- type-end
- identifier-start
- identifier-end))
+ type-identifier-end
+ type-end
+ identifier-start
+ identifier-end))
(:copier nil)
(:predicate nil))
(type-start nil :read-only t)
+ (type-identifier-end nil :read-only t)
(type-end nil :read-only t)
(identifier-start nil :read-only t)
(identifier-end nil :read-only t))
@@ -76,20 +78,24 @@
(- (gnome-align--marker-column (gnome-align--argument-type-end arg))
(gnome-align--marker-column (gnome-align--argument-type-start arg))))
+(defun gnome-align--argument-type-identifier-width (arg)
+ (- (gnome-align--marker-column
+ (gnome-align--argument-type-identifier-end arg))
+ (gnome-align--marker-column
+ (gnome-align--argument-type-start arg))))
+
(defun gnome-align--arglist-identifier-start-column (arglist start-column)
- (let ((column start-column)
- argument-column)
- (dolist (argument arglist)
- (setq argument-column (+ start-column
- (gnome-align--argument-type-width argument)))
- (when (gnome-align--argument-identifier-start argument)
- (save-excursion
- (goto-char (gnome-align--argument-identifier-start argument))
- (when (eq (preceding-char) ? )
- (setq argument-column (1+ argument-column)))))
- (when (> argument-column column)
- (setq column argument-column)))
- column))
+ (let ((max-type-identifier-width
+ (apply #'max
+ (mapcar #'gnome-align--argument-type-identifier-width arglist)))
+ (max-extra-width
+ (apply #'max
+ (mapcar
+ (lambda (argument)
+ (- (gnome-align--argument-type-end argument)
+ (gnome-align--argument-type-identifier-end argument)))
+ arglist))))
+ (+ start-column max-type-identifier-width max-extra-width)))
(defun gnome-align--argument-identifier-width (argument)
(if (gnome-align--argument-identifier-start argument)
@@ -133,6 +139,7 @@
(save-restriction
(narrow-to-region beg end)
(let (type-start
+ type-identifier-end
type-end
identifier-start
identifier-end
@@ -149,11 +156,14 @@
(setq identifier-start (point-marker))
(c-backward-syntactic-ws)
(if (or (bobp) (eq (preceding-char) ?,))
- ;; Identifier is omitted, or '...'.
- (setq type-start identifier-start
- type-end identifier-end
- identifier-start nil
- identifier-end nil)
+ (progn
+ ;; Identifier is omitted, or '...'.
+ (setq type-start identifier-start
+ type-identifier-end identifier-end
+ type-end identifier-end
+ identifier-start nil
+ identifier-end nil)
+ (c-backward-token-2))
(setq type-end (point-marker)
last-token-start type-end)
(while (and (not (bobp))
@@ -162,9 +172,17 @@
(unless (eq (char-after) ?,)
(setq last-token-start (point-marker)))))
(c-backward-syntactic-ws))
- (setq type-start last-token-start))
- (push (gnome-align--make-argument type-start type-end
- identifier-start identifier-end)
+ (setq type-start last-token-start)
+ (save-excursion
+ (goto-char type-end)
+ (skip-chars-backward "*" type-start)
+ (c-backward-syntactic-ws)
+ (setq type-identifier-end (point-marker))))
+ (push (gnome-align--make-argument type-start
+ type-identifier-end
+ type-end
+ identifier-start
+ identifier-end)
arglist))
arglist))))
diff --git a/gnome-tests.el b/gnome-tests.el
index d4e3113..403e0b1 100644
--- a/gnome-tests.el
+++ b/gnome-tests.el
@@ -20,7 +20,7 @@ void g_gpg_ctx_clear_signers (GGpgCtx *ctx);
")
(defconst gnome-test-program-1-aligned "\
-GGpgCtx *g_gpg_ctx_new (GError **error);
+GGpgCtx *g_gpg_ctx_new (GError **error);
typedef void (*GGpgProgressCallback) (gpointer user_data,
const gchar *what,
@@ -28,16 +28,16 @@ typedef void (*GGpgProgressCallback) (gpointer user_data,
gint current,
gint total);
-void g_gpg_ctx_set_progress_callback (GGpgCtx *ctx,
- GGpgProgressCallback callback,
- gpointer user_data,
- GDestroyNotify destroy_data);
-void g_gpg_ctx_add_signer (GGpgCtx *ctx,
- GGpgKey *key);
-guint g_gpg_ctx_get_n_signers (GGpgCtx *ctx);
-GGpgKey *g_gpg_ctx_get_signer (GGpgCtx *ctx,
- guint index);
-void g_gpg_ctx_clear_signers (GGpgCtx *ctx);
+void g_gpg_ctx_set_progress_callback (GGpgCtx *ctx,
+ GGpgProgressCallback callback,
+ gpointer user_data,
+ GDestroyNotify destroy_data);
+void g_gpg_ctx_add_signer (GGpgCtx *ctx,
+ GGpgKey *key);
+guint g_gpg_ctx_get_n_signers (GGpgCtx *ctx);
+GGpgKey *g_gpg_ctx_get_signer (GGpgCtx *ctx,
+ guint index);
+void g_gpg_ctx_clear_signers (GGpgCtx *ctx);
")
(defconst gnome-test-program-2 "\
@@ -57,6 +57,18 @@ const gchar ** gtk_widget_list_action_prefixes
(GtkWidget *
GParamSpec *pspec);
")
+(defconst gnome-test-program-4 "\
+FOO_AVAILABLE_IN_ALL
+int foo (struct foo ***a, int b, ...) G_GNUC_CONST;
+")
+
+(defconst gnome-test-program-4-aligned "\
+FOO_AVAILABLE_IN_ALL
+int foo (struct foo ***a,
+ int b,
+ ...) G_GNUC_CONST;
+")
+
(ert-deftest gnome-test-align--compute-optimal-columns ()
"Tests the `gnome-align--compute-optimal-columns'."
(with-temp-buffer
@@ -65,7 +77,7 @@ const gchar ** gtk_widget_list_action_prefixes
(GtkWidget *
(let ((columns (gnome-align--compute-optimal-columns (point-min)
(point-max))))
(should (= (cdr (assq 'identifier-start-column columns)) 9))
(should (= (cdr (assq 'arglist-start-column columns)) 41))
- (should (= (cdr (assq 'arglist-identifier-start-column columns)) 63)))))
+ (should (= (cdr (assq 'arglist-identifier-start-column columns)) 64)))))
(ert-deftest gnome-test-align-region ()
"Tests the `gnome-align-region'."
@@ -76,6 +88,15 @@ const gchar ** gtk_widget_list_action_prefixes
(GtkWidget *
(gnome-align-region (point-min) (point-max))
(should (equal (buffer-string) gnome-test-program-1-aligned))))
+(ert-deftest gnome-test-align-region-2 ()
+ "Tests the `gnome-align-region'."
+ (with-temp-buffer
+ (insert gnome-test-program-4)
+ (c-mode)
+ (gnome-align-compute-optimal-columns (point-min) (point-max))
+ (gnome-align-region (point-min) (point-max))
+ (should (equal (buffer-string) gnome-test-program-4-aligned))))
+
(ert-deftest gnome-test-align-guess-columns-1 ()
"Tests the `gnome-align-guess-columns'."
(with-temp-buffer
- [elpa] master 7285abe 15/40: Reorder commands in README.md, (continued)
- [elpa] master 7285abe 15/40: Reorder commands in README.md, Daiki Ueno, 2016/01/22
- [elpa] master 1ad58dc 01/40: Initial import, Daiki Ueno, 2016/01/22
- [elpa] master b4d4672 14/40: align: Support vfuncs, Daiki Ueno, 2016/01/22
- [elpa] master ae40679 18/40: Add symlink to README, Daiki Ueno, 2016/01/22
- [elpa] master 1e67806 19/40: snippet: Make options customizable, Daiki Ueno, 2016/01/22
- [elpa] master e8714b1 13/40: align: -guess-columns -> -compute-optimal-columns, Daiki Ueno, 2016/01/22
- [elpa] master abb9dd4 21/40: Revert "align: Add a room before '*' for arguments", Daiki Ueno, 2016/01/22
- [elpa] master d608680 20/40: align: Add a room before '*' for arguments, Daiki Ueno, 2016/01/22
- [elpa] master 147931d 27/40: Fix typo, Daiki Ueno, 2016/01/22
- [elpa] master ec40108 23/40: align: Use `max' as much as possible, Daiki Ueno, 2016/01/22
- [elpa] master d6d27bd 22/40: align: Reimplement d6086809,
Daiki Ueno <=
- [elpa] master ccb6062 24/40: tests: Bind `gnome-align-max-column', Daiki Ueno, 2016/01/22
- [elpa] master f339477 28/40: Add references to developer.gnome.org, Daiki Ueno, 2016/01/22
- [elpa] master 78a0cce 31/40: align: Fix `max' usage, Daiki Ueno, 2016/01/22
- [elpa] master 03f8dca 32/40: tests: Add line wrapping tests, Daiki Ueno, 2016/01/22
- [elpa] master a65924c 26/40: align: Remove spaces between two '*', Daiki Ueno, 2016/01/22
- [elpa] master 39e7fb6 29/40: Rename some commands, Daiki Ueno, 2016/01/22
- [elpa] master 570b52f 30/40: snippet: Fix indentation, Daiki Ueno, 2016/01/22
- [elpa] master e84487c 35/40: snippet: Add FIXME comment, Daiki Ueno, 2016/01/22
- [elpa] master b04d18e 33/40: Change copyright holder to FSF, Daiki Ueno, 2016/01/22
- [elpa] master 06c8a6a 38/40: * packages/gnome-c-style/gnome-c-tests.el: Really add copyright blurb, Daiki Ueno, 2016/01/22