1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	JavaScript
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4a5792f58SBram Moolenaar" Updaters:	Scott Shattuck (ss) <[email protected]>
5071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/javascript.vim
6a5792f58SBram Moolenaar" Changes:	(ss) added keywords, reserved words, and other identifiers
7a5792f58SBram Moolenaar"		(ss) repaired several quoting and grouping glitches
8a5792f58SBram Moolenaar"		(ss) fixed regex parsing issue with multiple qualifiers [gi]
9a5792f58SBram Moolenaar"		(ss) additional factoring of keywords, globals, and members
10*dad4473fSBram Moolenaar" Last Change:	2021 Mar 30
11ec7944aaSBram Moolenaar" 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
127dda86f2SBram Moolenaar" 		2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
13071d4279SBram Moolenaar
14071d4279SBram Moolenaar" tuning parameters:
15071d4279SBram Moolenaar" unlet javaScript_fold
16071d4279SBram Moolenaar
17071d4279SBram Moolenaarif !exists("main_syntax")
1889bcfda6SBram Moolenaar  " quit when a syntax file was already loaded
1989bcfda6SBram Moolenaar  if exists("b:current_syntax")
20071d4279SBram Moolenaar    finish
21071d4279SBram Moolenaar  endif
22071d4279SBram Moolenaar  let main_syntax = 'javascript'
23e2db695dSBram Moolenaarelseif exists("b:current_syntax") && b:current_syntax == "javascript"
24e2db695dSBram Moolenaar  finish
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
270c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
280c5fa7d7SBram Moolenaarset cpo&vim
290c5fa7d7SBram Moolenaar
30071d4279SBram Moolenaar
31071d4279SBram Moolenaarsyn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
329964e468SBram Moolenaarsyn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
33071d4279SBram Moolenaarsyn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
349964e468SBram Moolenaarsyn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
35071d4279SBram Moolenaarsyn match   javaScriptSpecial	       "\\\d\d\d\|\\."
36a5792f58SBram Moolenaarsyn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
37a5792f58SBram Moolenaarsyn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
3891f84f6eSBram Moolenaarsyn region  javaScriptStringT	       start=+`+  skip=+\\\\\|\\`+  end=+`+	contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc
3991f84f6eSBram Moolenaar
4091f84f6eSBram Moolenaarsyn region  javaScriptEmbed	       start=+${+  end=+}+	contains=@javaScriptEmbededExpr
41a5792f58SBram Moolenaar
42071d4279SBram Moolenaarsyn match   javaScriptSpecialCharacter "'\\.'"
43071d4279SBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
44*dad4473fSBram Moolenaarsyn match   javaScriptNumber	       "-\=\<\d\+\%(_\d\+\)*\>"
4591f84f6eSBram Moolenaarsyn 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
46a5792f58SBram Moolenaar
47a5792f58SBram Moolenaarsyn keyword javaScriptConditional	if else switch
48a5792f58SBram Moolenaarsyn keyword javaScriptRepeat		while for do in
49a5792f58SBram Moolenaarsyn keyword javaScriptBranch		break continue
50a5792f58SBram Moolenaarsyn keyword javaScriptOperator		new delete instanceof typeof
51a5792f58SBram Moolenaarsyn keyword javaScriptType		Array Boolean Date Function Number Object String RegExp
525be4ceecSBram Moolenaarsyn keyword javaScriptStatement		return with await
53071d4279SBram Moolenaarsyn keyword javaScriptBoolean		true false
54a5792f58SBram Moolenaarsyn keyword javaScriptNull		null undefined
5500a927d6SBram Moolenaarsyn keyword javaScriptIdentifier	arguments this var let
56a5792f58SBram Moolenaarsyn keyword javaScriptLabel		case default
57a5792f58SBram Moolenaarsyn keyword javaScriptException		try catch finally throw
58a5792f58SBram Moolenaarsyn keyword javaScriptMessage		alert confirm prompt status
59a5792f58SBram Moolenaarsyn keyword javaScriptGlobal		self window top parent
60a5792f58SBram Moolenaarsyn keyword javaScriptMember		document event location
61a5792f58SBram Moolenaarsyn keyword javaScriptDeprecated	escape unescape
625be4ceecSBram Moolenaarsyn 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
63071d4279SBram Moolenaar
6491f84f6eSBram Moolenaarsyn cluster  javaScriptEmbededExpr	contains=javaScriptBoolean,javaScriptNull,javaScriptIdentifier,javaScriptStringD,javaScriptStringS,javaScriptStringT
6591f84f6eSBram Moolenaar
66071d4279SBram Moolenaarif exists("javaScript_fold")
67071d4279SBram Moolenaar    syn match	javaScriptFunction	"\<function\>"
68071d4279SBram Moolenaar    syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
69071d4279SBram Moolenaar
70071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
71071d4279SBram Moolenaar    syn sync match javaScriptSync	grouphere NONE "^}"
72071d4279SBram Moolenaar
73071d4279SBram Moolenaar    setlocal foldmethod=syntax
74071d4279SBram Moolenaar    setlocal foldtext=getline(v:foldstart)
75071d4279SBram Moolenaarelse
76071d4279SBram Moolenaar    syn keyword javaScriptFunction	function
77a5792f58SBram Moolenaar    syn match	javaScriptBraces	   "[{}\[\]]"
78a5792f58SBram Moolenaar    syn match	javaScriptParens	   "[()]"
79071d4279SBram Moolenaarendif
80071d4279SBram Moolenaar
81388a5d4fSBram Moolenaarif main_syntax == "javascript"
82071d4279SBram Moolenaar  syn sync fromstart
83071d4279SBram Moolenaar  syn sync maxlines=100
84071d4279SBram Moolenaar
85071d4279SBram Moolenaar  syn sync ccomment javaScriptComment
86071d4279SBram Moolenaarendif
87071d4279SBram Moolenaar
88071d4279SBram Moolenaar" Define the default highlighting.
8989bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
90f37506f6SBram Moolenaarhi def link javaScriptComment		Comment
91f37506f6SBram Moolenaarhi def link javaScriptLineComment		Comment
92f37506f6SBram Moolenaarhi def link javaScriptCommentTodo		Todo
93f37506f6SBram Moolenaarhi def link javaScriptSpecial		Special
94f37506f6SBram Moolenaarhi def link javaScriptStringS		String
95f37506f6SBram Moolenaarhi def link javaScriptStringD		String
9691f84f6eSBram Moolenaarhi def link javaScriptStringT		String
97f37506f6SBram Moolenaarhi def link javaScriptCharacter		Character
98f37506f6SBram Moolenaarhi def link javaScriptSpecialCharacter	javaScriptSpecial
99f37506f6SBram Moolenaarhi def link javaScriptNumber		javaScriptValue
100f37506f6SBram Moolenaarhi def link javaScriptConditional		Conditional
101f37506f6SBram Moolenaarhi def link javaScriptRepeat		Repeat
102f37506f6SBram Moolenaarhi def link javaScriptBranch		Conditional
103f37506f6SBram Moolenaarhi def link javaScriptOperator		Operator
104f37506f6SBram Moolenaarhi def link javaScriptType			Type
105f37506f6SBram Moolenaarhi def link javaScriptStatement		Statement
106f37506f6SBram Moolenaarhi def link javaScriptFunction		Function
107f37506f6SBram Moolenaarhi def link javaScriptBraces		Function
108f37506f6SBram Moolenaarhi def link javaScriptError		Error
109f37506f6SBram Moolenaarhi def link javaScrParenError		javaScriptError
110f37506f6SBram Moolenaarhi def link javaScriptNull			Keyword
111f37506f6SBram Moolenaarhi def link javaScriptBoolean		Boolean
112f37506f6SBram Moolenaarhi def link javaScriptRegexpString		String
113a5792f58SBram Moolenaar
114f37506f6SBram Moolenaarhi def link javaScriptIdentifier		Identifier
115f37506f6SBram Moolenaarhi def link javaScriptLabel		Label
116f37506f6SBram Moolenaarhi def link javaScriptException		Exception
117f37506f6SBram Moolenaarhi def link javaScriptMessage		Keyword
118f37506f6SBram Moolenaarhi def link javaScriptGlobal		Keyword
119f37506f6SBram Moolenaarhi def link javaScriptMember		Keyword
120f37506f6SBram Moolenaarhi def link javaScriptDeprecated		Exception
121f37506f6SBram Moolenaarhi def link javaScriptReserved		Keyword
122f37506f6SBram Moolenaarhi def link javaScriptDebug		Debug
123f37506f6SBram Moolenaarhi def link javaScriptConstant		Label
12491f84f6eSBram Moolenaarhi def link javaScriptEmbed		Special
12591f84f6eSBram Moolenaar
126a5792f58SBram Moolenaar
127071d4279SBram Moolenaar
128071d4279SBram Moolenaarlet b:current_syntax = "javascript"
129071d4279SBram Moolenaarif main_syntax == 'javascript'
130071d4279SBram Moolenaar  unlet main_syntax
131071d4279SBram Moolenaarendif
1320c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
1330c5fa7d7SBram Moolenaarunlet s:cpo_save
134071d4279SBram Moolenaar
135071d4279SBram Moolenaar" vim: ts=8
136