blob: cb2d16e2a772976f5a756def737b84896a087de9 [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)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013
Bram Moolenaar071d4272004-06-13 20:20:40 +000014" tuning parameters:
15" unlet javaScript_fold
16
17if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020018 " quit when a syntax file was already loaded
19 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000020 finish
21 endif
22 let main_syntax = 'javascript'
Bram Moolenaare2db6952013-07-24 19:53:36 +020023elseif exists("b:current_syntax") && b:current_syntax == "javascript"
24 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000025endif
26
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020027let s:cpo_save = &cpo
28set cpo&vim
29
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
31syn keyword javaScriptCommentTodo TODO FIXME XXX TBD contained
Bram Moolenaar9964e462007-05-05 17:54:07 +000032syn match javaScriptLineComment "\/\/.*" contains=@Spell,javaScriptCommentTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000033syn match javaScriptCommentSkip "^[ \t]*\*\($\|[ \t]\+\)"
Bram Moolenaar9964e462007-05-05 17:54:07 +000034syn region javaScriptComment start="/\*" end="\*/" contains=@Spell,javaScriptCommentTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000035syn match javaScriptSpecial "\\\d\d\d\|\\."
Bram Moolenaar00a927d2010-05-14 23:24:24 +020036syn region javaScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=javaScriptSpecial,@htmlPreproc
37syn region javaScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contains=javaScriptSpecial,@htmlPreproc
Bram Moolenaar91f84f62018-07-29 15:07:52 +020038syn region javaScriptStringT start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc
39
40syn region javaScriptEmbed start=+${+ end=+}+ contains=@javaScriptEmbededExpr
Bram Moolenaara5792f52005-11-23 21:25:05 +000041
Bram Moolenaar63f32602022-06-09 20:45:54 +010042" number handling by Christopher Leonard chris.j.leonard@gmx.com
Bram Moolenaar071d4272004-06-13 20:20:40 +000043syn match javaScriptSpecialCharacter "'\\.'"
Bram Moolenaar63f32602022-06-09 20:45:54 +010044syn match javaScriptNumber "\<0[bB][0-1]\+\(_[0-1]\+\)*\>"
45syn match javaScriptNumber "\<0[oO][0-7]\+\(_[0-7]\+\)*\>"
46syn match javaScriptNumber "\<0\([0-7]\+\(_[0-7]\+\)*\)\?\>"
47syn match javaScriptNumber "\<0[xX][0-9a-fA-F]\+\(_[0-9a-fA-F]\+\)*\>"
48syn match javaScriptNumber "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
49syn match javaScriptNumber "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
50syn match javaScriptNumber "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
51syn match javaScriptNumber "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
Bram Moolenaar91f84f62018-07-29 15:07:52 +020052syn 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 +000053
54syn keyword javaScriptConditional if else switch
Yuri Klimova5988f52023-08-18 01:03:23 +030055syn keyword javaScriptRepeat while for do in of
Bram Moolenaara5792f52005-11-23 21:25:05 +000056syn keyword javaScriptBranch break continue
57syn keyword javaScriptOperator new delete instanceof typeof
58syn keyword javaScriptType Array Boolean Date Function Number Object String RegExp
Yuri Klimova5988f52023-08-18 01:03:23 +030059syn keyword javaScriptStatement return with await yield
Bram Moolenaar293ee4d2004-12-09 21:34:53 +000060syn keyword javaScriptBoolean true false
Bram Moolenaara5792f52005-11-23 21:25:05 +000061syn keyword javaScriptNull null undefined
Bram Moolenaar00a927d2010-05-14 23:24:24 +020062syn keyword javaScriptIdentifier arguments this var let
Bram Moolenaara5792f52005-11-23 21:25:05 +000063syn keyword javaScriptLabel case default
64syn keyword javaScriptException try catch finally throw
65syn keyword javaScriptMessage alert confirm prompt status
66syn keyword javaScriptGlobal self window top parent
67syn keyword javaScriptMember document event location
68syn keyword javaScriptDeprecated escape unescape
Bram Moolenaar5be4cee2019-09-27 19:34:08 +020069syn keyword javaScriptReserved abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile async
Bram Moolenaar071d4272004-06-13 20:20:40 +000070
Bram Moolenaar91f84f62018-07-29 15:07:52 +020071syn cluster javaScriptEmbededExpr contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT
72
Bram Moolenaar071d4272004-06-13 20:20:40 +000073if exists("javaScript_fold")
Bram Moolenaar00a927d2010-05-14 23:24:24 +020074 syn match javaScriptFunction "\<function\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000075 syn region javaScriptFunctionFold start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
76
77 syn sync match javaScriptSync grouphere javaScriptFunctionFold "\<function\>"
78 syn sync match javaScriptSync grouphere NONE "^}"
79
80 setlocal foldmethod=syntax
81 setlocal foldtext=getline(v:foldstart)
82else
Bram Moolenaar00a927d2010-05-14 23:24:24 +020083 syn keyword javaScriptFunction function
Bram Moolenaara5792f52005-11-23 21:25:05 +000084 syn match javaScriptBraces "[{}\[\]]"
85 syn match javaScriptParens "[()]"
Bram Moolenaar071d4272004-06-13 20:20:40 +000086endif
87
Bram Moolenaar071d4272004-06-13 20:20:40 +000088if main_syntax == "javascript"
Bram Moolenaar388a5d42020-05-26 21:20:45 +020089 syn sync fromstart
90 syn sync maxlines=100
91
Bram Moolenaar071d4272004-06-13 20:20:40 +000092 syn sync ccomment javaScriptComment
93endif
94
95" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020096" Only when an item doesn't have highlighting yet
Bram Moolenaarf37506f2016-08-31 22:22:10 +020097hi def link javaScriptComment Comment
98hi def link javaScriptLineComment Comment
99hi def link javaScriptCommentTodo Todo
100hi def link javaScriptSpecial Special
101hi def link javaScriptStringS String
102hi def link javaScriptStringD String
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200103hi def link javaScriptStringT String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200104hi def link javaScriptCharacter Character
105hi def link javaScriptSpecialCharacter javaScriptSpecial
106hi def link javaScriptNumber javaScriptValue
107hi def link javaScriptConditional Conditional
108hi def link javaScriptRepeat Repeat
109hi def link javaScriptBranch Conditional
110hi def link javaScriptOperator Operator
111hi def link javaScriptType Type
112hi def link javaScriptStatement Statement
113hi def link javaScriptFunction Function
114hi def link javaScriptBraces Function
115hi def link javaScriptError Error
116hi def link javaScrParenError javaScriptError
117hi def link javaScriptNull Keyword
118hi def link javaScriptBoolean Boolean
119hi def link javaScriptRegexpString String
Bram Moolenaara5792f52005-11-23 21:25:05 +0000120
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200121hi def link javaScriptIdentifier Identifier
122hi def link javaScriptLabel Label
123hi def link javaScriptException Exception
124hi def link javaScriptMessage Keyword
125hi def link javaScriptGlobal Keyword
126hi def link javaScriptMember Keyword
127hi def link javaScriptDeprecated Exception
128hi def link javaScriptReserved Keyword
129hi def link javaScriptDebug Debug
130hi def link javaScriptConstant Label
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200131hi def link javaScriptEmbed Special
132
Bram Moolenaara5792f52005-11-23 21:25:05 +0000133
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135let b:current_syntax = "javascript"
136if main_syntax == 'javascript'
137 unlet main_syntax
138endif
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200139let &cpo = s:cpo_save
140unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
142" vim: ts=8