From 82c3a6d37c992c364170734978416af5e476de37 Mon Sep 17 00:00:00 2001 From: Loic Lemaitre Date: Sat, 2 Mar 2024 19:09:19 +0100 Subject: [PATCH] Make comment at point more accurate. --- jtsx.el | 16 +++++++++++----- tests/jtsx-tests.el | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/jtsx.el b/jtsx.el index 3a10c13..5ecc539 100644 --- a/jtsx.el +++ b/jtsx.el @@ -202,11 +202,17 @@ See `comment-dwim' documentation for ARG usage." "Add support for commenting/uncommenting inside JSX. See `comment-dwim' documentation for ARG usage." (interactive "*P") - (if (jtsx-jsx-context-p) - (if (jtsx-jsx-attribute-context-p) - (jtsx-comment-jsx-attribute-dwim arg) - (jtsx-comment-jsx-dwim arg)) - (comment-dwim arg))) + (cond + ;; Inside JSX attribute context ? + ((or (and (region-active-p) (jtsx-jsx-attribute-context-p)) + (and (not (region-active-p)) (jtsx-jsx-attribute-context-at-p (line-end-position)))) + (jtsx-comment-jsx-attribute-dwim arg)) + ;; Inside JSX context ? + ((or (and (region-active-p) (jtsx-jsx-context-p)) + (and (not (region-active-p)) (jtsx-jsx-context-at-p (line-end-position)))) + (jtsx-comment-jsx-dwim arg)) + ;; General case + (t (comment-dwim arg)))) (defun jtsx-enclosing-jsx-node (node types &optional fallback-types include-node jsx-exp-guard) "Get first parent of NODE matching one of TYPES. diff --git a/tests/jtsx-tests.el b/tests/jtsx-tests.el index 5274739..07d3da7 100644 --- a/tests/jtsx-tests.el +++ b/tests/jtsx-tests.el @@ -292,6 +292,20 @@ Turn this buffer in MODE mode if supplied or defaults to jtsx-tsx-mode." (should (equal (comment-dwim-into-buffer content set-point #'jtsx-jsx-mode) result)) (should (equal (comment-dwim-into-buffer content set-point #'jtsx-tsx-mode) result)))) +(ert-deftest jtsx-test-comment-jsx-at-attribute-point () + (let ((set-point #'(lambda () (progn (goto-char 8)))) + (content "(\n\n\n);") + (result "(\n {/* */}\n\n);")) + (should (equal (comment-dwim-into-buffer content set-point #'jtsx-jsx-mode) result)) + (should (equal (comment-dwim-into-buffer content set-point #'jtsx-tsx-mode) result)))) + +(ert-deftest jtsx-test-comment-jsx-attribute-at-point () + (let ((set-point #'(lambda () (progn (goto-char 8)))) + (content "(\n\n\n);") + (result "(\n\n\n);")) + (should (equal (comment-dwim-into-buffer content set-point #'jtsx-jsx-mode) result)) + (should (equal (comment-dwim-into-buffer content set-point #'jtsx-tsx-mode) result)))) + ;; TEST INDENTATION (ert-deftest jtsx-test-no-indent-switch-case () (let ((jtsx-switch-indent-offset 0)