blob: c73f5d70977a4d7b0d13709d1973bb5134b1188b [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: JavaScript
3" Maintainer: Claudio Fleiner <claudio@fleiner.com>
Bram Moolenaara5792f52005-11-23 21:25:05 +00004" Updaters: Scott Shattuck (ss) <ss@technicalpursuit.com>
Bram Moolenaar071d4272004-06-13 20:20:40 +00005" URL: http://www.fleiner.com/vim/syntax/javascript.vim
Bram Moolenaara5792f52005-11-23 21:25:05 +00006" Changes: (ss) added keywords, reserved words, and other identifiers
7" (ss) repaired several quoting and grouping glitches
8" (ss) fixed regex parsing issue with multiple qualifiers [gi]
9" (ss) additional factoring of keywords, globals, and members
Bram Moolenaar63f32602022-06-09 20:45:54 +010010" Last Change: 2022 Jun 09
Bram Moolenaarec7944a2013-06-12 21:29:15 +020011" 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
Bram Moolenaar7dda86f2018-04-20 22:36:41 +020012" 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
Tobiasz Laskowskiea760962024-08-14 14:50:56 +020013" 2024 Aug 14: fix a few stylistic issues (#15480)
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaar071d4272004-06-13 20:20:40 +000015" tuning parameters:
16" unlet javaScript_fold
17
18if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020019 " quit when a syntax file was already loaded
20 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000021 finish
22 endif
23 let main_syntax = 'javascript'
Bram Moolenaare2db6952013-07-24 19:53:36 +020024elseif exists("b:current_syntax") && b:current_syntax == "javascript"
25 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000026endif
27
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020028let s:cpo_save = &cpo
29set cpo&vim
30
Bram Moolenaar071d4272004-06-13 20:20:40 +000031
32syn keyword javaScriptCommentTodo TODO FIXME XXX TBD contained
Bram Moolenaar9964e462007-05-05 17:54:07 +000033syn match javaScriptLineComment "\/\/.*" contains=@Spell,javaScriptCommentTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000034syn match javaScriptCommentSkip "^[ \t]*\*\($\|[ \t]\+\)"
Bram Moolenaar9964e462007-05-05 17:54:07 +000035syn region javaScriptComment start="/\*" end="\*/" contains=@Spell,javaScriptCommentTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000036syn match javaScriptSpecial "\\\d\d\d\|\\."
Bram Moolenaar00a927d2010-05-14 23:24:24 +020037syn region javaScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=javaScriptSpecial,@htmlPreproc
38syn region javaScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contains=javaScriptSpecial,@htmlPreproc
Bram Moolenaar91f84f62018-07-29 15:07:52 +020039syn region javaScriptStringT start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc
40
41syn region javaScriptEmbed start=+${+ end=+}+ contains=@javaScriptEmbededExpr
Bram Moolenaara5792f52005-11-23 21:25:05 +000042
Bram Moolenaar63f32602022-06-09 20:45:54 +010043" number handling by Christopher Leonard chris.j.leonard@gmx.com
Bram Moolenaar071d4272004-06-13 20:20:40 +000044syn match javaScriptSpecialCharacter "'\\.'"
Bram Moolenaar63f32602022-06-09 20:45:54 +010045syn match javaScriptNumber "\<0[bB][0-1]\+\(_[0-1]\+\)*\>"
46syn match javaScriptNumber "\<0[oO][0-7]\+\(_[0-7]\+\)*\>"
47syn match javaScriptNumber "\<0\([0-7]\+\(_[0-7]\+\)*\)\?\>"
48syn match javaScriptNumber "\<0[xX][0-9a-fA-F]\+\(_[0-9a-fA-F]\+\)*\>"
49syn match javaScriptNumber "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
50syn match javaScriptNumber "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
51syn match javaScriptNumber "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
52syn match javaScriptNumber "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
Bram Moolenaar91f84f62018-07-29 15:07:52 +020053syn region javaScriptRegexpString start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline
Bram Moolenaara5792f52005-11-23 21:25:05 +000054
55syn keyword javaScriptConditional if else switch
Yuri Klimova5988f52023-08-18 01:03:23 +030056syn keyword javaScriptRepeat while for do in of
Bram Moolenaara5792f52005-11-23 21:25:05 +000057syn keyword javaScriptBranch break continue
58syn keyword javaScriptOperator new delete instanceof typeof
59syn keyword javaScriptType Array Boolean Date Function Number Object String RegExp
Yuri Klimova5988f52023-08-18 01:03:23 +030060syn keyword javaScriptStatement return with await yield
Bram Moolenaar293ee4d2004-12-09 21:34:53 +000061syn keyword javaScriptBoolean true false
Bram Moolenaara5792f52005-11-23 21:25:05 +000062syn keyword javaScriptNull null undefined
Tobiasz Laskowskiea760962024-08-14 14:50:56 +020063syn keyword javaScriptIdentifier arguments this
Bram Moolenaara5792f52005-11-23 21:25:05 +000064syn keyword javaScriptLabel case default
65syn keyword javaScriptException try catch finally throw
66syn keyword javaScriptMessage alert confirm prompt status
67syn keyword javaScriptGlobal self window top parent
68syn keyword javaScriptMember document event location
69syn keyword javaScriptDeprecated escape unescape
Tobiasz Laskowskiea760962024-08-14 14:50:56 +020070syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float from goto implements import int interface let long native package private protected public short super synchronized throws transient var volatile async
71syn keyword javaScriptModifier static
Bram Moolenaar071d4272004-06-13 20:20:40 +000072
Bram Moolenaar91f84f62018-07-29 15:07:52 +020073syn cluster javaScriptEmbededExpr contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT
74
Bram Moolenaar071d4272004-06-13 20:20:40 +000075if exists("javaScript_fold")
Bram Moolenaar00a927d2010-05-14 23:24:24 +020076 syn match javaScriptFunction "\<function\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000077 syn region javaScriptFunctionFold start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
78
79 syn sync match javaScriptSync grouphere javaScriptFunctionFold "\<function\>"
80 syn sync match javaScriptSync grouphere NONE "^}"
81
82 setlocal foldmethod=syntax
83 setlocal foldtext=getline(v:foldstart)
84else
Bram Moolenaar00a927d2010-05-14 23:24:24 +020085 syn keyword javaScriptFunction function
Bram Moolenaara5792f52005-11-23 21:25:05 +000086 syn match javaScriptBraces "[{}\[\]]"
87 syn match javaScriptParens "[()]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000088endif
89
Bram Moolenaar071d4272004-06-13 20:20:40 +000090if main_syntax == "javascript"
Bram Moolenaar388a5d42020-05-26 21:20:45 +020091 syn sync fromstart
92 syn sync maxlines=100
93
Bram Moolenaar071d4272004-06-13 20:20:40 +000094 syn sync ccomment javaScriptComment
95endif
96
97" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020098" Only when an item doesn't have highlighting yet
Bram Moolenaarf37506f2016-08-31 22:22:10 +020099hi def link javaScriptComment Comment
100hi def link javaScriptLineComment Comment
101hi def link javaScriptCommentTodo Todo
102hi def link javaScriptSpecial Special
103hi def link javaScriptStringS String
104hi def link javaScriptStringD String
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200105hi def link javaScriptStringT String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200106hi def link javaScriptCharacter Character
107hi def link javaScriptSpecialCharacter javaScriptSpecial
Meqae71e9d92023-08-20 22:20:59 +0300108hi def link javaScriptNumber Number
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200109hi def link javaScriptConditional Conditional
110hi def link javaScriptRepeat Repeat
111hi def link javaScriptBranch Conditional
112hi def link javaScriptOperator Operator
113hi def link javaScriptType Type
114hi def link javaScriptStatement Statement
Tobiasz Laskowskiea760962024-08-14 14:50:56 +0200115hi def link javaScriptFunction Keyword
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200116hi def link javaScriptBraces Function
117hi def link javaScriptError Error
118hi def link javaScrParenError javaScriptError
119hi def link javaScriptNull Keyword
120hi def link javaScriptBoolean Boolean
121hi def link javaScriptRegexpString String
Bram Moolenaara5792f52005-11-23 21:25:05 +0000122
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200123hi def link javaScriptIdentifier Identifier
124hi def link javaScriptLabel Label
125hi def link javaScriptException Exception
126hi def link javaScriptMessage Keyword
127hi def link javaScriptGlobal Keyword
128hi def link javaScriptMember Keyword
129hi def link javaScriptDeprecated Exception
130hi def link javaScriptReserved Keyword
Tobiasz Laskowskiea760962024-08-14 14:50:56 +0200131hi def link javaScriptModifier StorageClass
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200132hi def link javaScriptDebug Debug
133hi def link javaScriptConstant Label
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200134hi def link javaScriptEmbed Special
135
Bram Moolenaara5792f52005-11-23 21:25:05 +0000136
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138let b:current_syntax = "javascript"
139if main_syntax == 'javascript'
140 unlet main_syntax
141endif
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200142let &cpo = s:cpo_save
143unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" vim: ts=8