branch: externals/phps-mode commit 2cc670ef4061b5236bc0f5e0ed2396678e343c26 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Improved documentation, minor code optimizations --- README.md | 45 ++++++++++++++++++++++++++++++++++++------ docs/heuristics.md | 6 ++++++ docs/imenu.md | 2 ++ docs/todo.md | 5 +++-- phps-mode-automation.el | 4 ++-- phps-mode-functions.el | 12 +++++------ phps-mode-lexer.el | 8 +++++--- phps-mode.el | 14 ++++++------- sample-php-files/functions.php | 2 ++ 9 files changed, 72 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a5cce8b..ee007c9 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ This mode does not require PHP installed on your computer because it has a built * Imenu support * Minimal mode map* Tested using unit tests and integration tests * Travis support +* Included in ELPA ## Develop @@ -91,18 +92,50 @@ make compile make clean ``` -## Installation example +## Installation -Download to `~/.emacs.d/phps-mode/` and then add this to your init file: +### Install manually -### Using use-package with flycheck support +If you have downloaded manually i.e. to `~/.emacs.d/phps-mode/` you need to add this first to your init file: ``` emacs-lisp (add-to-list 'load-path (expand-file-name "~/.emacs.d/phps-mode/")) +``` + +### Install via package manager + +You can install via ELPA (`M-x package-install` `phps-mode`), package will be loaded automatically then. + +### Install, load and configure via use-package + +``` emacs-lisp +(use-package phps-mode + :after flycheck + :ensure t + :mode ("\\.php\\'" "\\.phtml\\'")) +``` + +### Load and configure using use-package + +``` emacs-lisp (use-package phps-mode :after flycheck - :mode ("\\.php\\'" "\\.phtml\\'") - :config - (setq phps-mode-flycheck-support t)) + :mode ("\\.php\\'" "\\.phtml\\'")) ``` +### Load and configure using regular emacs-lisp +``` emacs-lisp +(require 'phps-mode) +(add-to-list 'auto-mode-alist '("\\.\\(php\\|phtml\\)\\'" . phps-mode)) +``` + +## Contribute + +This project is licensed to Free Software Foundation so sign the needed papers. Then create a branch based on a updated `develop`. Make pull request. + +## Docs + +* [TODO](docs/todo.md) +* [Heuristics](docs/heuristics.md) +* [Imenu algorithm](docs/imenu.md) +* [Indentation algorithm](docs/indentation.md) diff --git a/docs/heuristics.md b/docs/heuristics.md index 90098f5..744cfbe 100644 --- a/docs/heuristics.md +++ b/docs/heuristics.md @@ -1,2 +1,8 @@ +## Heuristics + +These should solve the problem of freezing editor when making white-space changes to code. + * When pressing return when line after cursor is only white-space * When pressing backspace when line before cursor is only white-space + +[Back to start](../../../) diff --git a/docs/imenu.md b/docs/imenu.md index 9bba396..1603078 100644 --- a/docs/imenu.md +++ b/docs/imenu.md @@ -20,3 +20,5 @@ for token in tokens: endfor; ``` + +[Back to start](../../../) diff --git a/docs/todo.md b/docs/todo.md index 60673c0..2996673 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -1,4 +1,4 @@ -## TODOs +## TODO *With current progress estimates:* @@ -11,4 +11,5 @@ * Flymake support (0%) * PSR-2 auto-formatting tool based on lexer tokens (0%) * Add to MELPA (0%) -* Add to ELPA (0%) + +[Back to start](../../../) diff --git a/phps-mode-automation.el b/phps-mode-automation.el index 2a31e55..980f460 100644 --- a/phps-mode-automation.el +++ b/phps-mode-automation.el @@ -27,7 +27,7 @@ ;;; Code: -(add-to-list 'load-path (expand-file-name "~/.emacs.d/emacs-wisent-grammar-converter/")) +(add-to-list 'load-path (expand-file-name (concat user-emacs-directory "emacs-wisent-grammar-converter/"))) (autoload 'emacs-wisent-grammar-converter/generate-grammar-from-filename "emacs-wisent-grammar-converter") (let ((php-yacc-url "https://raw.githubusercontent.com/php/php-src/master/Zend/zend_language_parser.y") @@ -38,7 +38,7 @@ (unless (file-exists-p php-yacc-file) (message "Downloading PHP Yacc grammar..") (url-copy-file php-yacc-url php-yacc-file t t) - (message "Downlad completed")) + (message "Download completed")) ;; Generate grammar (message "Generating Wisent grammar..") diff --git a/phps-mode-functions.el b/phps-mode-functions.el index 79df173..5e6e920 100644 --- a/phps-mode-functions.el +++ b/phps-mode-functions.el @@ -987,13 +987,13 @@ (progn (goto-char end) (backward-char 3) - (when (looking-at-p " \\*\/") + (when (looking-at-p " \\*/") (delete-char 3)) (goto-char beg) - (when (looking-at-p "\/\/ ") + (when (looking-at-p "// ") (delete-char 3)) - (when (looking-at-p "\/\\* ") + (when (looking-at-p "/\\* ") (delete-char 3))) ;; Do this for every line in region @@ -1006,15 +1006,15 @@ ;; Does this line contain something other than white-space? (unless (>= (+ (point) 3) (line-end-position)) - (when (looking-at-p "\/\/ ") + (when (looking-at-p "// ") (delete-char 3)) - (when (looking-at-p "\/\\* ") + (when (looking-at-p "/\\* ") (delete-char 3)) (move-end-of-line nil) (backward-char 3) - (when (looking-at-p " \\*\/") + (when (looking-at-p " \\*/") (delete-char 3))) (when (< current-line-number end-line-number) diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el index 46161c5..a8e8079 100644 --- a/phps-mode-lexer.el +++ b/phps-mode-lexer.el @@ -148,8 +148,9 @@ "Exponent double number.") (defvar phps-mode-lexer-LABEL - "[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*" + "[a-zA-Z_\u0080-\u00FF][a-zA-Z0-9_\x80-\xff]*" "Labels are used for names.") +;; NOTE original \x80-\xff replaced with \u0080-\u00FF, since original means raw bytes in emacs-lisp (defvar phps-mode-lexer-WHITESPACE "[ \n\r\t]+" "White-space.") @@ -157,8 +158,9 @@ (defvar phps-mode-lexer-TABS_AND_SPACES "[ \t]*" "Tabs and white-spaces.") -(defvar phps-mode-lexer-TOKENS "[][;\\:,\.()|^&+-/*=%!~\\$<>?@]" +(defvar phps-mode-lexer-TOKENS "[][;:,.()|^&+/*=%!~$<>?@-]" "Tokens.") +;; NOTE The hyphen moved last since it has special meaning and to avoid it being interpreted as a range. (defvar phps-mode-lexer-ANY_CHAR ".\\|\n" "Any character. The Zend equivalent is [^] but is not possible in Emacs Lisp.") @@ -1364,7 +1366,7 @@ ;; (message "Double quoted string %s" double-quoted-string) ;; Do we find variable inside quote? (goto-char string-start) - (if (looking-at "[^\\\\]\"") + (if (looking-at "[^\\]\"") (progn (let ((_double-quoted-string (buffer-substring-no-properties start (+ string-start 2)))) ;; (message "Double quoted string: %s" _double-quoted-string) diff --git a/phps-mode.el b/phps-mode.el index fcfc9be..8290f0a 100644 --- a/phps-mode.el +++ b/phps-mode.el @@ -5,8 +5,8 @@ ;; Author: Christian Johansson <github.com/cjohansson> ;; Maintainer: Christian Johansson <github.com/cjohansson> ;; Created: 3 Mar 2018 -;; Modified: 4 May 2019 -;; Version: 0.2.1 +;; Modified: 17 Jul 2019 +;; Version: 0.2.2 ;; Keywords: tools, convenience ;; URL: https://github.com/cjohansson/emacs-phps-mode @@ -30,13 +30,16 @@ ;;; Commentary: +;; A major-mode that uses original PHP lexer tokens for syntax coloring and indentation making it easier to spot errors in syntax. Also includes full support for PSR-1 and PSR-2 indentation, imenu. Improved syntax table in comparison with old PHP major-mode. + ;; Please see README.md from the same repository for extended documentation. -;; NOTE use wisent-parse-toggle-verbose-flag and (semantic-debug) to debug parsing ;;; Code: +;; NOTE use wisent-parse-toggle-verbose-flag and (semantic-debug) to debug parsing + (autoload 'phps-mode-flycheck-init "phps-mode-flycheck") (autoload 'phps-mode-flymake-init "phps-mode-flymake") (autoload 'phps-mode-font-lock-init "phps-mode-font-lock") @@ -67,7 +70,7 @@ ;; Font lock (phps-mode-font-lock-init) - ;; Flymake + ;; Flymake TODO ;; (phps-mode-flymake-init) ;; Flycheck @@ -76,9 +79,6 @@ ;; Override functions (phps-mode-functions-init) - (setq major-mode 'phps-mode) - (setq mode-name "PHPs") - ;; Lexer (phps-mode-lexer-init) diff --git a/sample-php-files/functions.php b/sample-php-files/functions.php index 1b64482..3cf263f 100644 --- a/sample-php-files/functions.php +++ b/sample-php-files/functions.php @@ -6,5 +6,7 @@ */ function myFunctionA($myArg1, $myArg2) { + $myArg1 = true; + $myArg2 = false; echo "some stuff"; }