1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-04 02:51:31 -08:00

php-ts-mode' depends on mhtml-ts-mode' instead of JS,CSS and HTML

The direct dependence on js-ts-mode, css-ts-mode and html-ts-mode
has now been replaced by 'mhtml-ts-mode'.
Additional benefits are:
1. Imenu now exposes symbols for all of all languages,
2. navigation now works correctly for all languages,
3. outline works for all languages.

Additional new features are:
1. indentation of PHP in mixed buffers with HTML now works much
better and allows three different behaviors, an option allows you to
choose the behavior.
2. a new feature shows where PHP ini files are both locally and
remotely, if the buffer is associated with a remote PHP file.

* etc/NEWS: Mention the rationale for those changes, the new command,
and the new options.
* lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode--range-settings): New
variable that store range settings.
(mhtml-ts-mode--treesit-aggregated-outline-predicate): New variable
that store outline predicates.
(mhtml-ts-mode): Use those two new variables.
* lisp/progmodes/php-ts-mode.el: Update doc string.  Removed old
dependencies.
(php-ts-mode--language-source-alist): Updated parsers version.
(php-ts-mode-install-parsers): Removed old dependencies, now relies
on (mhtml-ts-mode-install-parsers).  Update doc string.
(php-ts-mode-js-css-indent-offset): Update doc string.
(php-ts-mode-css-fontify-colors): Removed option, now relies on
'php-ts-mode-css-fontify-colors'.
(php-ts-mode-html-indent-offset): New user option.
(php-ts-mode-html-relative-indent): New user option.
(php-ts-mode-php-default-executable): Assume \"php\" instead of
\"/usr/bin/php\" if 'executable-find' fails.
(php-ts-mode-php-config): Fix tag.
(php-ts-mode-find-sibling-rules): New user option with the rules for
finding siblings of a file.
(php-ts-mode-phpdoc-highlight-errors): New user option, if non-nil
highlight unkown PHPDOC nodes.
(php-ts-mode--indent-style-setter): Indentation fix.
(php-ts-mode-indent-style): Indentation fix.
(php-ts-mode-flymake-php): Indentation fix.
(php-ts-mode--executable): Indentation fix.
(php-ts-mode-show-ini): New command that show the locations of PHP
ini files.
(php-ts-mode--get-indent-style): Indentation fix.
(php-ts-mode--set-indent-property): Indentation fix.
(php-ts-mode-set-style): Indentation fix.
(php-ts-mode--get-parser-ranges): Indentation fix.
(php-ts-mode--possibly-braceless-keyword-re): Removed no longer
used constant.
(php-ts-mode--open-statement-group-heuristic): Removed no longer
used function.
(php-ts-mode--else-heuristic): Indentation fix.
(php-ts-mode--first-sibling): Indentation fix.
(php-ts-mode--js-css-tag-bol): Function removed, now using
'mhtml-ts-mode--js-css-tag-bol'.
(php-ts-mode--parent-html-bol): Removed no longer used
function.
(php-ts-mode--parent-html-heuristic): Now more reliably handles
the mixed indentation of PHP and HTML. The new option
'php-ts-mode-html-relative-indent' changes the behavior of the
function. When 'php-ts-mode-html-relative-indent' is 't' the new
option 'php-ts-mode-html-indent-offset' controls the offset of PHP
code relative to HTML tags.
(php-ts-mode--array-element-heuristic): Indentation fix.
(php-ts-mode--anchor-prev-sibling): Indentation fix..
(php-ts-mode--indent-styles): The indentation rules for 'program'
and 'text_interpolation' are now common to all indentation styles,
thanks to the new version of 'php-ts-mode-arent-html-heuristic'.
New rules for 'namespace_use_clause', 'use_declaration',
'use_list', 'attribute_group' and 'string_content'.
(php-ts-mode--prettify-symbols-alist): New variable to support
'prettify-symbols-alist'.
(php-ts-mode--test-visibility-modifier-operation-clause-p): Rename ...
(php-ts-mode--test-visibility-modifier-operation-p): ... to this more
correct name.
(php-ts-mode--test-property-hook-clause-p): Rename ...
(php-ts-mode--test-property-hook-p): ... to this more correct name.
(php-ts-mode--test-relative-name-p): New function to test if
'relative_name' is supported by the PHP parser.
(php-ts-mode--font-lock-settings): Use the new function for highlight
'relative_name'. Highlight 'error_suppression_expression'.
Refactoring using the renamed functions.  Indentation fix.
(php-ts-mode--custom-html-font-lock-settings): Replace the rules with
'mhtml-ts-mode--treesit-font-lock-settings'.  Fix docs string.
(php-ts-mode--phpdoc-font-lock-settings): Added support for "array"
and "list" array_type.  New "phpdoc-error" feature to highlight
unknown nodes via new 'php-ts-mode--phpdoc-fontify-error' function.
(php-ts-mode--colorize-css-value): Removed function no longer used,
now highlighting is handled directly by 'mhtml-ts-mode'.
(php-ts-mode--phpdoc-fontify-error): New function used by
'php-ts-mode--phpdoc-font-lock-settings'.
(php-ts-mode--parent-object): Indentation fix.
(php-ts-mode--defun-name-separator): Indentation fix.
(php-ts-mode--defun-object-name): Indentation fix.
(php-ts-mode--defun-name): The function now also returns the defun
name of 'mhtml-ts-mode'.
(php-ts-mode--treesit-defun-type-regexp): New regexp for
'treesit-defun-type-regexp' support.
(php-ts-mode--indent-defun): Indentation fix.
(php-ts-mode--defun-valid-p): Fix indentation.
(php-ts-mode--comment-indent-new-line): Indentation fix.
(php-ts-mode--comment-current-plist): New local variable that stores
the state of the PHP comment style.
(php-ts-mode--comment-setup): The function now handles changing, for
different languages, comment styles, using
"php-ts-mode--comment-current-plist" to store and retrieve the comment
style for the PHP language.
(php-ts-mode-comment-setup): Now store the PHP comment style in
'php-ts-mode--comment-current-plist'.
(php-ts-mode-menu): Indentation fix.
(php-ts-mode): Replace dependency from JS, CSS and HTML width
'mhtml-ts-mode'.  Navigation, Imenu and Outline now support PHP, HTML,
Javascript and CSS.  Added support for 'prettify-symbol-mode'.
Added support for 'electric-layout-rules'.
(php-ts-mode-run-php-webserver, php-ts-mode--webserver-read-args)
(php-ts-mode--webserver-read-args, inferior-php-ts-mode, run-php)
(inferior-php-ts-mode-startup, php-ts-mode-inferior--write-history)
(php-ts-mode-send-region): Indentation fixes.

(Bug#78994)
This commit is contained in:
Vincenzo Pupillo 2025-07-10 17:20:34 +02:00 committed by Eli Zaretskii
parent 3fb8ffe61e
commit e1fd7b5d89
3 changed files with 917 additions and 797 deletions

View file

@ -931,6 +931,12 @@ option controls how much is indented for method chaining.
** PHP-ts mode
---
*** 'php-ts-mode' now depends on 'mhtml-ts-mode'.
The direct dependency on js-ts-mode, css-ts-mode and html-ts-mode has
now been replaced by mhtml-ts-mode. Navigation, Outline and Imenu
work for all languages and code maintenance is easier.
---
*** 'php-ts-mode-run-php-webserver' can now accept a custom "php.ini" file.
You can use the new optional argument CONFIG when calling
@ -939,6 +945,34 @@ the built-in Web server. Interactively, when invoked with a prefix
argument, 'php-ts-mode-run-php-webserver' prompts for the config file as
well as for other connection parameters.
---
*** The option 'php-ts-mode-css-fontify-colors' has been removed.
'mhtml-ts-mode-css-fontify-colors' replaces this option.
---
*** New user option 'php-ts-mode-html-relative-indent'.
In buffers containing both PHP and HTML, this option allows you to
define how the PHP code should be indented relative to the position of
the HTML tags.
---
*** New user option 'php-ts-mode-html-indent-offset'.
Offset of PHP code block relative to HTML tags.
---
*** New user option 'php-ts-mode-find-sibling-rules'.
Rules for finding siblings of a PHP file.
---
*** New user option 'php-ts-mode-phpdoc-highlight-errors'.
When non nil, it highlights unknown PHPDOC tags using
'font-lock-warning-face' so that the user can identify them more easily.
---
*** New command 'php-ts-mode-show-ini'.
Show the location of the PHP ini files, if the buffer is associated to a remote
PHP file show the remote PHP ini files.
** Rust-ts mode
---

File diff suppressed because it is too large Load diff

View file

@ -333,7 +333,8 @@ NODE and PARENT are ignored."
"function_declaration"
"lexical_declaration"
"element"
"rule_set"))
"rule_set"
"keyframe_block"))
"Settings for `treesit-defun-type-regexp'.")
;; In order to support `prettify-symbols-mode', just `append' the prettify
@ -348,13 +349,11 @@ NODE and PARENT are ignored."
(defun mhtml-ts-mode--defun-name (node)
"Return the defun name of NODE.
Return nil if there is no name or if NODE is not a defun node."
(let ((html-name (html-ts-mode--defun-name node))
(js-name (js--treesit-defun-name node))
(css-name (css--treesit-defun-name node)))
(let ((lang (treesit-node-language node)))
(cond
(html-name html-name)
(js-name js-name)
(css-name css-name))))
((eq lang 'html) (html-ts-mode--defun-name node))
((eq lang 'javascript) (js--treesit-defun-name node))
((eq lang 'css) (css--treesit-defun-name node)))))
(defvar-local mhtml-ts-mode--comment-current-lang nil)
@ -432,6 +431,41 @@ Calls REPORT-FN directly. Requires tidy."
(process-send-region mhtml-ts-mode--flymake-process (point-min) (point-max))
(process-send-eof mhtml-ts-mode--flymake-process)))))
(defvar mhtml-ts-mode--range-settings
(append
(treesit-range-rules
:embed 'javascript
:host 'html
'((script_element
(start_tag (tag_name))
(raw_text) @cap))
;; Another rule could be added that when it matches an
;; attribute_value that has as its parent an
;; attribute_name "style" it captures it and then
;; passes it to the css parser.
:embed 'css
:host 'html
'((style_element
(start_tag (tag_name))
(raw_text) @cap)))
;; jsdoc is not mandatory for js-ts-mode, so we respect this by
;; adding jsdoc range rules only when jsdoc is available.
(when (treesit-ensure-installed 'jsdoc)
(treesit-range-rules
:embed 'jsdoc
:host 'javascript
:local t
`(((comment) @cap
(:match ,js--treesit-jsdoc-beginning-regexp @cap)))))))
(defvar mhtml-ts-mode--treesit-aggregated-outline-predicate
`((html . ,#'html-ts-mode--outline-predicate)
(javascript . ,js-ts-mode--outline-predicate)
(css . ,css-ts-mode--outline-predicate))
"Settings for `treesit-aggregated-outline-predicate'.")
;;;###autoload
(define-derived-mode mhtml-ts-mode html-ts-mode
'("HTML+" (:eval (let ((lang (treesit-language-at (point))))
@ -475,35 +509,11 @@ Powered by tree-sitter."
;; Multi-language modes must set the primary parser.
(setq-local treesit-primary-parser (treesit-parser-create 'html))
(setq-local treesit-range-settings
(treesit-range-rules
:embed 'javascript
:host 'html
'((script_element
(start_tag (tag_name))
(raw_text) @cap))
;; Another rule could be added that when it matches an
;; attribute_value that has as its parent an
;; attribute_name "style" it captures it and then
;; passes it to the css parser.
:embed 'css
:host 'html
'((style_element
(start_tag (tag_name))
(raw_text) @cap))))
(setq-local treesit-range-settings mhtml-ts-mode--range-settings)
;; jsdoc is not mandatory for js-ts-mode, so we respect this by
;; adding jsdoc range rules only when jsdoc is available.
(when (treesit-ensure-installed 'jsdoc)
(setq-local treesit-range-settings
(append treesit-range-settings
(treesit-range-rules
:embed 'jsdoc
:host 'javascript
:local t
`(((comment) @cap
(:match ,js--treesit-jsdoc-beginning-regexp @cap))))))
(setq-local c-ts-common--comment-regexp
js--treesit-jsdoc-comment-regexp))
@ -563,9 +573,7 @@ Powered by tree-sitter."
mhtml-ts-mode--treesit-aggregated-simple-imenu-settings)
(setq-local treesit-aggregated-outline-predicate
`((html . ,#'html-ts-mode--outline-predicate)
(javascript . ,js-ts-mode--outline-predicate)
(css . ,css-ts-mode--outline-predicate)))
mhtml-ts-mode--treesit-aggregated-outline-predicate)
(treesit-major-mode-setup)