Thank you for your contribution! A regexp scan on phps-mode, using relint,
found some irregularities. Summary here, along with some things that relint
didn't catch:
php-mode-lexer.el:160:
(defvar phps-mode-lexer-TOKENS "[][;\\:,\.()|^&+-/*=%!~\\$<>?@]"
The hyphen (-) is special and should be placed last to avoid being interpreted
as a range.
The lone backslash in front of the dot has no effect, since backslashes must be
doubled inside string literals.
On the regexp level, backslashes are not special inside [...] and only
represent themselves, with no escaping power. This regexp includes it multiple
times which was probably unintended.
php-mode-lexer.el:1367:
(if (looking-at "[^\\\\]\"")
No need to double the backslash; it's not special inside [...].
php-mode-lexer.el:151:
"[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*"
Hex and octal escapes in the 128-255 range do not denote Unicode (Latin-1) characters but raw
bytes, which you likely did not intend to match here. To match U+0080-U+00FF, write
"\u0080-\u00FF". I don't know PHP's lexing rules, but if you want to match Unicode
identifiers, you'd be better off using something like "[[:alpha:]_][[:alnum:]_]*", or
syntax classes.
php-mode-functions.el:990:
(when (looking-at-p " \\*\/")
Ineffective backslash before `/', which does not need escaping anyway.
The same pattern (`\/') occurs in several other places in this file.