aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2024-02-17 04:54:48 -0500
committerEli Zaretskii2024-02-17 04:54:48 -0500
commite6dae47d718dfd2167554a1adfe28c5c744b9b2b (patch)
tree791cace9e56677914e95ed0288c9ff117a28c68d
parentd85461ac61c5ea99ea194f99c771de1efdabbef4 (diff)
parent45f9af61b8ecbe500de915f63de53e9c598184b9 (diff)
downloademacs-e6dae47d718dfd2167554a1adfe28c5c744b9b2b.tar.gz
emacs-e6dae47d718dfd2167554a1adfe28c5c744b9b2b.zip
Merge from origin/emacs-29
45f9af61b8e Remove references to phst@google.com. 7256690a3ca * BUGS: Note how to report critical security issues. 1035669b38b Add cross-reference to ELisp manual Caveats 61a14507627 Improve directory prompt used by package-vc-checkout 0c7c8210cb6 Minor Tramp doc adaption df243f785d4 Merge branch 'emacs-29' of git.sv.gnu.org:/srv/git/emacs ... 17a395e04c6 ;; Fix typo in the Tramp documentation 614b244a7fa * Improve reproducibility of inferred values by native comp 9f9da26e0dc Handle typescript ts grammar breaking change for function... 717d8c4285f Don't quote 't' in doc strings
-rw-r--r--.mailmap3
-rw-r--r--BUGS4
-rw-r--r--doc/lispref/intro.texi6
-rw-r--r--doc/misc/tramp.texi6
-rw-r--r--lisp/emacs-lisp/comp-cstr.el2
-rw-r--r--lisp/emacs-lisp/package-vc.el4
-rw-r--r--lisp/net/tramp.el6
-rw-r--r--lisp/outline.el4
-rw-r--r--lisp/progmodes/typescript-ts-mode.el362
9 files changed, 208 insertions, 189 deletions
diff --git a/.mailmap b/.mailmap
index 18e55b0d1e7..5e6ab5b8878 100644
--- a/.mailmap
+++ b/.mailmap
@@ -146,8 +146,7 @@ Philip Kaludercic <philipk@posteo.net>
146Philip Kaludercic <philipk@posteo.net> <philip.kaludercic@fau.de> 146Philip Kaludercic <philipk@posteo.net> <philip.kaludercic@fau.de>
147Philip Kaludercic <philipk@posteo.net> <philip@icterid> 147Philip Kaludercic <philipk@posteo.net> <philip@icterid>
148Philip Kaludercic <philipk@posteo.net> <philip@warpmail.net> 148Philip Kaludercic <philipk@posteo.net> <philip@warpmail.net>
149Philipp Stephani <phst@google.com> 149Philipp Stephani <p.stephani2@gmail.com>
150Philipp Stephani <phst@google.com> Philipp Stephani <p.stephani2@gmail.com>
151Phillip Lord <phillip.lord@russet.org.uk> <phillip.lord@newcastle.ac.uk> 150Phillip Lord <phillip.lord@russet.org.uk> <phillip.lord@newcastle.ac.uk>
152Pierre Lorenzon <devel@pollock-nageoire.net> 151Pierre Lorenzon <devel@pollock-nageoire.net>
153Pieter van Oostrum <pieter@vanoostrum.org> <pieter-l@vanoostrum.org> 152Pieter van Oostrum <pieter@vanoostrum.org> <pieter-l@vanoostrum.org>
diff --git a/BUGS b/BUGS
index ee473213c89..f23faa7c756 100644
--- a/BUGS
+++ b/BUGS
@@ -21,6 +21,10 @@ If necessary, you can read the manual without an info program:
21 21
22 cat info/emacs* | more "+/^File: emacs.*, Node: Bugs," 22 cat info/emacs* | more "+/^File: emacs.*, Node: Bugs,"
23 23
24If you think you may have found a critical security issue that needs
25to be communicated privately, please contact the GNU Emacs maintainers
26directly. See admin/MAINTAINERS for their contact details.
27
24 28
25Please first check the file etc/PROBLEMS (e.g. with C-h C-p in Emacs) to 29Please first check the file etc/PROBLEMS (e.g. with C-h C-p in Emacs) to
26make sure it isn't a known issue. 30make sure it isn't a known issue.
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index 2062ae64866..486125acb0d 100644
--- a/doc/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -89,9 +89,9 @@ you are criticizing.
89 89
90@cindex bugs 90@cindex bugs
91@cindex suggestions 91@cindex suggestions
92Please send comments and corrections using @kbd{M-x 92Please send comments and corrections using @kbd{M-x report-emacs-bug}.
93report-emacs-bug}. If you wish to contribute new code (or send a 93For more details, @xref{Bugs,, Reporting Bugs, emacs, The GNU Emacs
94patch to fix a problem), use @kbd{M-x submit-emacs-patch}. 94Manual}.
95 95
96@node Lisp History 96@node Lisp History
97@section Lisp History 97@section Lisp History
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 90824024c03..affd760730b 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -525,7 +525,7 @@ is used as the group to change to. The default host name is the same.
525@cindex @option{doas} method 525@cindex @option{doas} method
526 526
527If the @option{su}, @option{sudo} or @option{doas} option should be 527If the @option{su}, @option{sudo} or @option{doas} option should be
528performed on another host, it can be comnbined with a leading 528performed on another host, it can be combined with a leading
529@option{ssh} or @option{plink} option. That means that @value{tramp} 529@option{ssh} or @option{plink} option. That means that @value{tramp}
530connects first to the other host with non-administrative credentials, 530connects first to the other host with non-administrative credentials,
531and changes to administrative credentials on that host afterwards. In 531and changes to administrative credentials on that host afterwards. In
@@ -5243,8 +5243,8 @@ the additional handshaking messages for them. This requires at least
5243nitrokey, or titankey. 5243nitrokey, or titankey.
5244@c @uref{https://docs.fedoraproject.org/en-US/quick-docs/using-yubikeys/} 5244@c @uref{https://docs.fedoraproject.org/en-US/quick-docs/using-yubikeys/}
5245 5245
5246@strong{Note} that there are reports on problems of handling yubikey 5246@strong{Note} that there are reports on problems of handling FIDO2
5247residential keys by @command{ssh-agent}. As workaround, you might 5247(residential) keys by @command{ssh-agent}. As workaround, you might
5248disable @command{ssh-agent} for such keys. 5248disable @command{ssh-agent} for such keys.
5249 5249
5250@item 5250@item
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 2984bedb1dd..0bc97e51592 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -249,6 +249,8 @@ Return them as multiple value."
249 t) 249 t)
250 ((and (not (symbolp x)) (symbolp y)) 250 ((and (not (symbolp x)) (symbolp y))
251 nil) 251 nil)
252 ((or (consp x) (consp y)
253 nil))
252 (t 254 (t
253 (< (sxhash-equal x) 255 (< (sxhash-equal x)
254 (sxhash-equal y))))))) 256 (sxhash-equal y)))))))
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index 37980c28b02..ef056c7909b 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -939,8 +939,8 @@ for the last released version of the package."
939 (interactive 939 (interactive
940 (let* ((name (package-vc--read-package-name "Fetch package source: "))) 940 (let* ((name (package-vc--read-package-name "Fetch package source: ")))
941 (list (cadr (assoc name package-archive-contents #'string=)) 941 (list (cadr (assoc name package-archive-contents #'string=))
942 (read-file-name "Clone into new or empty directory: " nil nil t nil 942 (read-directory-name "Clone into new or empty directory: " nil nil
943 (lambda (dir) (or (not (file-exists-p dir)) 943 (lambda (dir) (or (not (file-exists-p dir))
944 (directory-empty-p dir)))) 944 (directory-empty-p dir))))
945 (and current-prefix-arg :last-release)))) 945 (and current-prefix-arg :last-release))))
946 (package-vc--archives-initialize) 946 (package-vc--archives-initialize)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index ae59915b1e8..2efee2344d2 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -745,9 +745,8 @@ The regexp should match at end of buffer."
745 745
746;; A security key requires the user physically to touch the device 746;; A security key requires the user physically to touch the device
747;; with their finger. We must tell it to the user. 747;; with their finger. We must tell it to the user.
748;; Added in OpenSSH 8.2. I've tested it with yubikey. Nitrokey and 748;; Added in OpenSSH 8.2. I've tested it with Nitrokey, Titankey, and
749;; Titankey, which have also passed the tests, do not show such a 749;; Yubikey.
750;; message.
751(defcustom tramp-security-key-confirm-regexp 750(defcustom tramp-security-key-confirm-regexp
752 (rx bol (* "\r") "Confirm user presence for key " (* nonl) (* (any "\r\n"))) 751 (rx bol (* "\r") "Confirm user presence for key " (* nonl) (* (any "\r\n")))
753 "Regular expression matching security key confirmation message. 752 "Regular expression matching security key confirmation message.
@@ -770,6 +769,7 @@ The regexp should match at end of buffer."
770 :version "28.1" 769 :version "28.1"
771 :type 'regexp) 770 :type 'regexp)
772 771
772;; Needed only for FIDO2 (residential) keys. Tested with Nitrokey and Yubikey.
773(defcustom tramp-security-key-pin-regexp 773(defcustom tramp-security-key-pin-regexp
774 (rx bol (* "\r") (group "Enter PIN for " (* nonl)) (* (any "\r\n"))) 774 (rx bol (* "\r") (group "Enter PIN for " (* nonl)) (* (any "\r\n")))
775 "Regular expression matching security key PIN prompt. 775 "Regular expression matching security key PIN prompt.
diff --git a/lisp/outline.el b/lisp/outline.el
index 5ac0f0707f1..40a75701cbf 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -318,8 +318,8 @@ Using the value `insert' is not recommended in editable
318buffers because it modifies them. 318buffers because it modifies them.
319When the value is `in-margins', then clickable buttons are 319When the value is `in-margins', then clickable buttons are
320displayed in the margins before the headings. 320displayed in the margins before the headings.
321When the value is `t', clickable buttons are displayed 321When the value is t, clickable buttons are displayed
322in the buffer before the headings. The values `t' and 322in the buffer before the headings. The values t and
323`in-margins' can be used in editing buffers because they 323`in-margins' can be used in editing buffers because they
324don't modify the buffer." 324don't modify the buffer."
325 ;; The value `insert' is not intended to be customizable. 325 ;; The value `insert' is not intended to be customizable.
diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el
index e9c6afff440..9ee9432e4ee 100644
--- a/lisp/progmodes/typescript-ts-mode.el
+++ b/lisp/progmodes/typescript-ts-mode.el
@@ -199,183 +199,197 @@ Argument LANGUAGE is either `typescript' or `tsx'."
199 [(nested_identifier (identifier)) (identifier)] 199 [(nested_identifier (identifier)) (identifier)]
200 @typescript-ts-jsx-tag-face))))) 200 @typescript-ts-jsx-tag-face)))))
201 201
202(defun tsx-ts-mode--font-lock-compatibility-function-expression (language)
203 "Handle tree-sitter grammar breaking change for `function' expression.
204
205LANGUAGE can be `typescript' or `tsx'. Starting from version 0.20.4 of the
206typescript/tsx grammar, `function' becomes `function_expression'."
207 (condition-case nil
208 (progn (treesit-query-capture language '((function_expression) @cap))
209 ;; New version of the grammar
210 'function_expression)
211 (treesit-query-error
212 ;; Old version of the grammar
213 'function)))
214
202(defun typescript-ts-mode--font-lock-settings (language) 215(defun typescript-ts-mode--font-lock-settings (language)
203 "Tree-sitter font-lock settings. 216 "Tree-sitter font-lock settings.
204Argument LANGUAGE is either `typescript' or `tsx'." 217Argument LANGUAGE is either `typescript' or `tsx'."
205 (treesit-font-lock-rules 218 (let ((func-exp (tsx-ts-mode--font-lock-compatibility-function-expression language)))
206 :language language 219 (treesit-font-lock-rules
207 :feature 'comment 220 :language language
208 `([(comment) (hash_bang_line)] @font-lock-comment-face) 221 :feature 'comment
209 222 `([(comment) (hash_bang_line)] @font-lock-comment-face)
210 :language language 223
211 :feature 'constant 224 :language language
212 `(((identifier) @font-lock-constant-face 225 :feature 'constant
213 (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face)) 226 `(((identifier) @font-lock-constant-face
214 [(true) (false) (null)] @font-lock-constant-face) 227 (:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face))
215 228 [(true) (false) (null)] @font-lock-constant-face)
216 :language language 229
217 :feature 'keyword 230 :language language
218 `([,@typescript-ts-mode--keywords] @font-lock-keyword-face 231 :feature 'keyword
219 [(this) (super)] @font-lock-keyword-face) 232 `([,@typescript-ts-mode--keywords] @font-lock-keyword-face
220 233 [(this) (super)] @font-lock-keyword-face)
221 :language language 234
222 :feature 'string 235 :language language
223 `((regex pattern: (regex_pattern)) @font-lock-regexp-face 236 :feature 'string
224 (string) @font-lock-string-face 237 `((regex pattern: (regex_pattern)) @font-lock-regexp-face
225 (template_string) @js--fontify-template-string 238 (string) @font-lock-string-face
226 (template_substitution ["${" "}"] @font-lock-misc-punctuation-face)) 239 (template_string) @js--fontify-template-string
227 240 (template_substitution ["${" "}"] @font-lock-misc-punctuation-face))
228 :language language 241
229 :override t ;; for functions assigned to variables 242 :language language
230 :feature 'declaration 243 :override t ;; for functions assigned to variables
231 `((function 244 :feature 'declaration
232 name: (identifier) @font-lock-function-name-face) 245 `((,func-exp
233 (function_declaration 246 name: (identifier) @font-lock-function-name-face)
234 name: (identifier) @font-lock-function-name-face) 247 (function_declaration
235 (function_signature 248 name: (identifier) @font-lock-function-name-face)
236 name: (identifier) @font-lock-function-name-face) 249 (function_signature
237 250 name: (identifier) @font-lock-function-name-face)
238 (method_definition 251
239 name: (property_identifier) @font-lock-function-name-face) 252 (method_definition
240 (method_signature 253 name: (property_identifier) @font-lock-function-name-face)
241 name: (property_identifier) @font-lock-function-name-face) 254 (method_signature
242 (required_parameter (identifier) @font-lock-variable-name-face) 255 name: (property_identifier) @font-lock-function-name-face)
243 (optional_parameter (identifier) @font-lock-variable-name-face) 256 (required_parameter (identifier) @font-lock-variable-name-face)
244 257 (optional_parameter (identifier) @font-lock-variable-name-face)
245 (variable_declarator 258
246 name: (identifier) @font-lock-function-name-face 259 (variable_declarator
247 value: [(function) (arrow_function)]) 260 name: (identifier) @font-lock-function-name-face
248 261 value: [(,func-exp) (arrow_function)])
249 (variable_declarator 262
250 name: (identifier) @font-lock-variable-name-face) 263 (variable_declarator
251 264 name: (identifier) @font-lock-variable-name-face)
252 (enum_declaration (identifier) @font-lock-type-face) 265
253 266 (enum_declaration (identifier) @font-lock-type-face)
254 (extends_clause value: (identifier) @font-lock-type-face) 267
255 ;; extends React.Component<T> 268 (extends_clause value: (identifier) @font-lock-type-face)
256 (extends_clause value: (member_expression 269 ;; extends React.Component<T>
257 object: (identifier) @font-lock-type-face 270 (extends_clause value: (member_expression
258 property: (property_identifier) @font-lock-type-face)) 271 object: (identifier) @font-lock-type-face
259 272 property: (property_identifier) @font-lock-type-face))
260 (arrow_function 273
261 parameter: (identifier) @font-lock-variable-name-face) 274 (arrow_function
262 275 parameter: (identifier) @font-lock-variable-name-face)
263 (variable_declarator 276
264 name: (array_pattern 277 (variable_declarator
265 (identifier) 278 name: (array_pattern
266 (identifier) @font-lock-function-name-face) 279 (identifier)
267 value: (array (number) (function))) 280 (identifier) @font-lock-function-name-face)
268 281 value: (array (number) (,func-exp)))
269 (catch_clause 282
270 parameter: (identifier) @font-lock-variable-name-face) 283 (catch_clause
271 284 parameter: (identifier) @font-lock-variable-name-face)
272 ;; full module imports 285
273 (import_clause (identifier) @font-lock-variable-name-face) 286 ;; full module imports
274 ;; named imports with aliasing 287 (import_clause (identifier) @font-lock-variable-name-face)
275 (import_clause (named_imports (import_specifier 288 ;; named imports with aliasing
276 alias: (identifier) @font-lock-variable-name-face))) 289 (import_clause (named_imports (import_specifier
277 ;; named imports without aliasing 290 alias: (identifier) @font-lock-variable-name-face)))
278 (import_clause (named_imports (import_specifier 291 ;; named imports without aliasing
279 !alias 292 (import_clause (named_imports (import_specifier
280 name: (identifier) @font-lock-variable-name-face))) 293 !alias
281 294 name: (identifier) @font-lock-variable-name-face)))
282 ;; full namespace import (* as alias) 295
283 (import_clause (namespace_import (identifier) @font-lock-variable-name-face))) 296 ;; full namespace import (* as alias)
284 297 (import_clause (namespace_import (identifier) @font-lock-variable-name-face)))
285 :language language 298
286 :feature 'identifier 299 :language language
287 `((nested_type_identifier 300 :feature 'identifier
288 module: (identifier) @font-lock-type-face) 301 `((nested_type_identifier
289 302 module: (identifier) @font-lock-type-face)
290 (type_identifier) @font-lock-type-face 303
291 304 (type_identifier) @font-lock-type-face
292 (predefined_type) @font-lock-type-face 305
293 306 (predefined_type) @font-lock-type-face
294 (new_expression 307
295 constructor: (identifier) @font-lock-type-face) 308 (new_expression
296 309 constructor: (identifier) @font-lock-type-face)
297 (enum_body (property_identifier) @font-lock-type-face) 310
298 311 (enum_body (property_identifier) @font-lock-type-face)
299 (enum_assignment name: (property_identifier) @font-lock-type-face) 312
300 313 (enum_assignment name: (property_identifier) @font-lock-type-face)
301 (variable_declarator 314
302 name: (identifier) @font-lock-variable-name-face) 315 (variable_declarator
303 316 name: (identifier) @font-lock-variable-name-face)
304 (for_in_statement 317
305 left: (identifier) @font-lock-variable-name-face) 318 (for_in_statement
306 319 left: (identifier) @font-lock-variable-name-face)
307 (arrow_function 320
308 parameters: 321 (arrow_function
309 [(_ (identifier) @font-lock-variable-name-face) 322 parameters:
310 (_ (_ (identifier) @font-lock-variable-name-face)) 323 [(_ (identifier) @font-lock-variable-name-face)
311 (_ (_ (_ (identifier) @font-lock-variable-name-face)))])) 324 (_ (_ (identifier) @font-lock-variable-name-face))
312 325 (_ (_ (_ (identifier) @font-lock-variable-name-face)))]))
313 :language language 326
314 :feature 'property 327 :language language
315 `((property_signature 328 :feature 'property
316 name: (property_identifier) @font-lock-property-name-face) 329 `((property_signature
317 (public_field_definition 330 name: (property_identifier) @font-lock-property-name-face)
318 name: (property_identifier) @font-lock-property-name-face) 331 (public_field_definition
319 332 name: (property_identifier) @font-lock-property-name-face)
320 (pair key: (property_identifier) @font-lock-property-use-face) 333
321 334 (pair key: (property_identifier) @font-lock-property-use-face)
322 ((shorthand_property_identifier) @font-lock-property-use-face)) 335
323 336 ((shorthand_property_identifier) @font-lock-property-use-face))
324 :language language 337
325 :feature 'expression 338 :language language
326 '((assignment_expression 339 :feature 'expression
327 left: [(identifier) @font-lock-function-name-face 340 `((assignment_expression
328 (member_expression 341 left: [(identifier) @font-lock-function-name-face
329 property: (property_identifier) @font-lock-function-name-face)] 342 (member_expression
330 right: [(function) (arrow_function)])) 343 property: (property_identifier) @font-lock-function-name-face)]
331 344 right: [(,func-exp) (arrow_function)]))
332 :language language 345
333 :feature 'function 346 :language language
334 '((call_expression 347 :feature 'function
335 function: 348 '((call_expression
336 [(identifier) @font-lock-function-call-face 349 function:
337 (member_expression 350 [(identifier) @font-lock-function-call-face
338 property: (property_identifier) @font-lock-function-call-face)])) 351 (member_expression
339 352 property: (property_identifier) @font-lock-function-call-face)]))
340 :language language 353
341 :feature 'pattern 354 :language language
342 `((pair_pattern 355 :feature 'pattern
343 key: (property_identifier) @font-lock-property-use-face 356 `((pair_pattern
344 value: [(identifier) @font-lock-variable-name-face 357 key: (property_identifier) @font-lock-property-use-face
345 (assignment_pattern left: (identifier) @font-lock-variable-name-face)]) 358 value: [(identifier) @font-lock-variable-name-face
346 359 (assignment_pattern left: (identifier) @font-lock-variable-name-face)])
347 (array_pattern (identifier) @font-lock-variable-name-face) 360
348 361 (array_pattern (identifier) @font-lock-variable-name-face)
349 ((shorthand_property_identifier_pattern) @font-lock-variable-name-face)) 362
350 363 ((shorthand_property_identifier_pattern) @font-lock-variable-name-face))
351 :language language 364
352 :feature 'jsx 365 :language language
353 (append (tsx-ts-mode--font-lock-compatibility-bb1f97b language) 366 :feature 'jsx
354 `((jsx_attribute (property_identifier) @typescript-ts-jsx-attribute-face))) 367 (append (tsx-ts-mode--font-lock-compatibility-bb1f97b language)
355 368 `((jsx_attribute (property_identifier) @typescript-ts-jsx-attribute-face)))
356 :language language 369
357 :feature 'number 370 :language language
358 `((number) @font-lock-number-face 371 :feature 'number
359 ((identifier) @font-lock-number-face 372 `((number) @font-lock-number-face
360 (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face))) 373 ((identifier) @font-lock-number-face
361 374 (:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face)))
362 :language language 375
363 :feature 'operator 376 :language language
364 `([,@typescript-ts-mode--operators] @font-lock-operator-face 377 :feature 'operator
365 (ternary_expression ["?" ":"] @font-lock-operator-face)) 378 `([,@typescript-ts-mode--operators] @font-lock-operator-face
366 379 (ternary_expression ["?" ":"] @font-lock-operator-face))
367 :language language 380
368 :feature 'bracket 381 :language language
369 '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) 382 :feature 'bracket
370 383 '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
371 :language language 384
372 :feature 'delimiter 385 :language language
373 '((["," "." ";" ":"]) @font-lock-delimiter-face) 386 :feature 'delimiter
374 387 '((["," "." ";" ":"]) @font-lock-delimiter-face)
375 :language language 388
376 :feature 'escape-sequence 389 :language language
377 :override t 390 :feature 'escape-sequence
378 '((escape_sequence) @font-lock-escape-face))) 391 :override t
392 '((escape_sequence) @font-lock-escape-face))))
379 393
380(defvar typescript-ts-mode--sentence-nodes 394(defvar typescript-ts-mode--sentence-nodes
381 '("import_statement" 395 '("import_statement"