branch: externals/phps-mode
commit c8c5b6264847282400e9d4b1cee4b4dbbcc9b607
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Made custom functions for (comment-region) and (uncomment-region)
---
README.md | 4 ++--
phps-mode-functions.el | 45 ++++++++++++++++++++++++++++++++-------------
phps-mode-test-functions.el | 4 ++--
3 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/README.md b/README.md
index 25df1e9..0e9551c 100644
--- a/README.md
+++ b/README.md
@@ -14,10 +14,10 @@ This mode does not require PHP installed on computer
because it has a elisp base
* Syntax coloring based on lexer tokens (100%)
* PSR-1 and PSR-2 indentation based on lexer tokens (100%)
* Imenu support (100%)
-* Integration with (electric-pair) (100%)
+* Integration with `(electric-pair)` (100%)
* Incremental lexer and syntax coloring after buffer changes (100%)
* Incremental indentation and imenu calculation after buffer changes (100%)
-* Supports `(comment-region)` and `(uncomment-region)` (50%)
+* Supports `(comment-region)` and `(uncomment-region)` (100%)
* Wisent LALR parser based on official PHP yacc parser automatically converted
grammar (50%)
* Approach flycheck about including support for this module by default (0%)
* Full integration with Emacs Semantic subsystem (30%)
diff --git a/phps-mode-functions.el b/phps-mode-functions.el
index 507e236..0de3711 100644
--- a/phps-mode-functions.el
+++ b/phps-mode-functions.el
@@ -789,7 +789,6 @@
(defun phps-mode-functions-comment-region (beg end &optional _arg)
"Comment region from BEG to END with optional ARG."
- (message "phps-mode-functions-comment-region %s %s %s" beg end _arg)
(save-excursion
;; Go to start of region
(goto-char beg)
@@ -799,26 +798,46 @@
;; Do this for every line in region
(while (< current-line-number end-line-number)
- (back-to-indentation)
+ (move-beginning-of-line nil)
;; Does this line contain something other than white-space?
(unless (eq (point) (line-end-position))
(insert comment-start)
- (end-of-line)
+ (move-end-of-line nil)
(insert comment-end))
(line-move 1)
- (setq current-line-number (line-number-at-pos))))
+ (setq current-line-number (line-number-at-pos))))))
-
- ))
-
-(defun phps-mode-functions-uncomment-region (beg end &optional arg)
+(defun phps-mode-functions-uncomment-region (beg end &optional _arg)
"Comment region from BEG to END with optional ARG."
(save-excursion
- (message "phps-mode-functions-uncomment-region %s %s %s" beg end arg)
- )
- )
+
+ ;; Go to start of region
+ (goto-char beg)
+
+ (let ((end-line-number (line-number-at-pos end t))
+ (current-line-number (line-number-at-pos)))
+
+ ;; Do this for every line in region
+ (while (< current-line-number end-line-number)
+ (move-beginning-of-line nil)
+
+ ;; Does this line contain something other than white-space?
+ (unless (>= (+ (point) 3) (line-end-position))
+ (when (looking-at-p "\/\/ ")
+ (delete-char 3))
+ (when (looking-at-p "\/\\* ")
+ (delete-char 3))
+
+ (move-end-of-line nil)
+
+ (backward-char 3)
+ (when (looking-at-p " \\*\/")
+ (delete-char 3)))
+
+ (line-move 1)
+ (setq current-line-number (line-number-at-pos))))))
(defun phps-mode-functions-init ()
@@ -850,8 +869,8 @@
;; Make (comment-region) and (uncomment-region) work
(set (make-local-variable 'comment-region-function)
#'phps-mode-functions-comment-region)
(set (make-local-variable 'uncomment-region-function)
#'phps-mode-functions-uncomment-region)
- (set (make-local-variable 'comment-start) "/* ")
- (set (make-local-variable 'comment-end) " */")
+ (set (make-local-variable 'comment-start) "// ")
+ (set (make-local-variable 'comment-end) "")
;; Support for change detection
(add-hook 'after-change-functions #'phps-mode-functions-after-change))
diff --git a/phps-mode-test-functions.el b/phps-mode-test-functions.el
index dda9bfd..e146b73 100644
--- a/phps-mode-test-functions.el
+++ b/phps-mode-test-functions.el
@@ -790,10 +790,10 @@
"Comment object-oriented file with bracket-less namespace, class that
extends and implements and functions with optional arguments"
(comment-region (point-min) (point-max))
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
- (should (equal buffer-contents "/* <?php */\n/* namespace myNamespace;
*/\n/* class myClass extends myAbstract implements myInterface { */\n /*
public function myFunctionA($myArg = null) {} */\n /* protected function
myFunctionB($myArg = 'abc') {} */\n/* } */\n"))))
+ (should (equal buffer-contents "// <?php\n// namespace myNamespace;\n//
class myClass extends myAbstract implements myInterface {\n// public
function myFunctionA($myArg = null) {}\n// protected function
myFunctionB($myArg = 'abc') {}\n// }\n"))))
(phps-mode-test-with-buffer
- "/* <?php */\n/* namespace myNamespace; */\n/* class myClass extends
myAbstract implements myInterface { */\n /* public function
myFunctionA($myArg = null) {} */\n /* protected function myFunctionB($myArg
= 'abc') {} */\n/* } */\n"
+ "// <?php\n// namespace myNamespace;\n// class myClass extends myAbstract
implements myInterface {\n// public function myFunctionA($myArg = null)
{}\n// protected function myFunctionB($myArg = 'abc') {}\n// }\n"
"Uncomment object-oriented file with bracket-less namespace, class that
extends and implements and functions with optional arguments"
(uncomment-region (point-min) (point-max))
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))