File tree 2 files changed +44
-2
lines changed
2 files changed +44
-2
lines changed Original file line number Diff line number Diff line change @@ -846,6 +846,22 @@ bbb: Bar,
846
846
(should (eq (get-face-at " aaa" ) 'font-lock-variable-name-face ))
847
847
(should (eq (get-face-at " bbb" ) 'font-lock-variable-name-face ))))
848
848
849
+ (ert-deftest font-lock/funargs--method--no-fontification-in-ternary ()
850
+ " Do not apply fontification on a function call inside a ternary
851
+ operator, which might look like method with return type
852
+ declaration."
853
+ (test-with-fontified-buffer
854
+ " true ? funcall(helloWorld) : false"
855
+ (should (eq (get-face-at " helloWorld" ) nil ))))
856
+
857
+ (ert-deftest font-lock/funargs--method--no-fontification-in-special-form ()
858
+ " Do not apply fontification inside a special form paren-form,
859
+ such as inside of if/while/switch etc. These look like method
860
+ declarations without a return type annotation but are not."
861
+ (test-with-fontified-buffer
862
+ " if (hello && world) { }"
863
+ (should (eq (get-face-at " world" ) nil ))))
864
+
849
865
(defun flyspell-predicate-test (search-for )
850
866
" This function runs a test on
851
867
`typescript--flyspell-mode-predicate' . `SEARCH-FOR' is a string
Original file line number Diff line number Diff line change @@ -1974,8 +1974,34 @@ and searches for the next token to be highlighted."
1974
1974
(is-method-def
1975
1975
(ignore-errors
1976
1976
(up-list )
1977
- (looking-at-p
1978
- (rx (* (or whitespace ?\n )) (or " :" " {" ))))))
1977
+ (and
1978
+ (or
1979
+ ; ; After the "argument list" is a bracket, this is
1980
+ ; ; either a special form (if, while...) or a method
1981
+ ; ; declaration.
1982
+ (looking-at-p (rx (* (or whitespace ?\n )) " {" ))
1983
+ ; ; After the "argument list" is a colon, this is
1984
+ ; ; either a method declaration with a return type
1985
+ ; ; annotation or ternary form. We need to discard
1986
+ ; ; the ternary form case.
1987
+ (and
1988
+ (looking-at-p (rx (* (or whitespace ?\n )) " :" ))
1989
+ (save-excursion
1990
+ (backward-sexp 2 )
1991
+ (skip-syntax-backward " >" )
1992
+ (not (eq (char-before ) ?? )))))
1993
+ ; ; HACK: here we check the fontification of
1994
+ ; ; the "function name". Because the keywords
1995
+ ; ; are fontified before this check runs, a
1996
+ ; ; keyword would already have been fontified
1997
+ ; ; and therefore we can conclude it is not a
1998
+ ; ; function/method definition.
1999
+ (save-excursion
2000
+ (backward-sexp )
2001
+ (backward-word )
2002
+ (not (memq
2003
+ 'font-lock-keyword-face
2004
+ (face-at-point nil t ))))))))
1979
2005
(if is-method-def
1980
2006
(prog1 (point ) (goto-char point-orig))
1981
2007
(point )))
You can’t perform that action at this time.
0 commit comments