diff options
Diffstat (limited to 'syntax')
-rw-r--r-- | syntax/json.vim | 80 |
1 files changed, 49 insertions, 31 deletions
diff --git a/syntax/json.vim b/syntax/json.vim index 25989ead..48bc18e1 100644 --- a/syntax/json.vim +++ b/syntax/json.vim @@ -5,6 +5,10 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'json') == -1 " Maintainer: Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json " Last Change: 2014-12-20 Load ftplugin/json.vim +" Reload the definition of g:vim_json_syntax_conceal +" see https://github.com/elzr/vim-json/issues/42 +runtime! ftplugin/json.vim + if !exists("main_syntax") if version < 600 syntax clear @@ -16,10 +20,16 @@ endif syntax match jsonNoise /\%(:\|,\)/ +" NOTE that for the concealing to work your conceallevel should be set to 2 + " Syntax: Strings " Separated into a match and region because a region by itself is always greedy syn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze[[:blank:]\r\n]*[,}\]]/ contains=jsonString -syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ concealends contains=jsonEscape contained +if has('conceal') && g:vim_json_syntax_conceal == 1 + syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ concealends contains=jsonEscape contained +else + syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=jsonEscape contained +endif " Syntax: JSON does not allow strings with single quotes, unlike JavaScript. syn region jsonStringSQError oneline start=+'+ skip=+\\\\\|\\"+ end=+'+ @@ -27,7 +37,11 @@ syn region jsonStringSQError oneline start=+'+ skip=+\\\\\|\\"+ end=+'+ " Syntax: JSON Keywords " Separated into a match and region because a region by itself is always greedy syn match jsonKeywordMatch /"\([^"]\|\\\"\)\+"[[:blank:]\r\n]*\:/ contains=jsonKeyword -syn region jsonKeyword matchgroup=jsonQuote start=/"/ end=/"\ze[[:blank:]\r\n]*\:/ contains=jsonEscape contained +if has('conceal') && g:vim_json_syntax_conceal == 1 + syn region jsonKeyword matchgroup=jsonQuote start=/"/ end=/"\ze[[:blank:]\r\n]*\:/ concealends contains=jsonEscape contained +else + syn region jsonKeyword matchgroup=jsonQuote start=/"/ end=/"\ze[[:blank:]\r\n]*\:/ contains=jsonEscape contained +endif " Syntax: Escape sequences syn match jsonEscape "\\["\\/bfnrt]" contained @@ -37,31 +51,33 @@ syn match jsonEscape "\\u\x\{4}" contained syn match jsonNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>\ze[[:blank:]\r\n]*[,}\]]" " ERROR WARNINGS ********************************************** -" Syntax: Strings should always be enclosed with quotes. -syn match jsonNoQuotesError "\<[[:alpha:]][[:alnum:]]*\>" -syn match jsonTripleQuotesError /"""/ +if (!exists("g:vim_json_warnings") || g:vim_json_warnings==1) + " Syntax: Strings should always be enclosed with quotes. + syn match jsonNoQuotesError "\<[[:alpha:]][[:alnum:]]*\>" + syn match jsonTripleQuotesError /"""/ -" Syntax: An integer part of 0 followed by other digits is not allowed. -syn match jsonNumError "-\=\<0\d\.\d*\>" + " Syntax: An integer part of 0 followed by other digits is not allowed. + syn match jsonNumError "-\=\<0\d\.\d*\>" -" Syntax: Decimals smaller than one should begin with 0 (so .1 should be 0.1). -syn match jsonNumError "\:\@<=[[:blank:]\r\n]*\zs\.\d\+" + " Syntax: Decimals smaller than one should begin with 0 (so .1 should be 0.1). + syn match jsonNumError "\:\@<=[[:blank:]\r\n]*\zs\.\d\+" -" Syntax: No comments in JSON, see http://stackoverflow.com/questions/244777/can-i-comment-a-json-file -syn match jsonCommentError "//.*" -syn match jsonCommentError "\(/\*\)\|\(\*/\)" + " Syntax: No comments in JSON, see http://stackoverflow.com/questions/244777/can-i-comment-a-json-file + syn match jsonCommentError "//.*" + syn match jsonCommentError "\(/\*\)\|\(\*/\)" -" Syntax: No semicolons in JSON -syn match jsonSemicolonError ";" + " Syntax: No semicolons in JSON + syn match jsonSemicolonError ";" -" Syntax: No trailing comma after the last element of arrays or objects -syn match jsonTrailingCommaError ",\_s*[}\]]" + " Syntax: No trailing comma after the last element of arrays or objects + syn match jsonTrailingCommaError ",\_s*[}\]]" -" Syntax: Watch out for missing commas between elements -syn match jsonMissingCommaError /\("\|\]\|\d\)\zs\_s\+\ze"/ -syn match jsonMissingCommaError /\(\]\|\}\)\_s\+\ze"/ "arrays/objects as values -syn match jsonMissingCommaError /}\_s\+\ze{/ "objects as elements in an array -syn match jsonMissingCommaError /\(true\|false\)\_s\+\ze"/ "true/false as value + " Syntax: Watch out for missing commas between elements + syn match jsonMissingCommaError /\("\|\]\|\d\)\zs\_s\+\ze"/ + syn match jsonMissingCommaError /\(\]\|\}\)\_s\+\ze"/ "arrays/objects as values + syn match jsonMissingCommaError /}\_s\+\ze{/ "objects as elements in an array + syn match jsonMissingCommaError /\(true\|false\)\_s\+\ze"/ "true/false as value +endif " ********************************************** END OF ERROR WARNINGS " Allowances for JSONP: function call at the beginning of the file, @@ -87,20 +103,22 @@ if version >= 508 || !exists("did_json_syn_inits") hi def link jsonString String hi def link jsonTest Label hi def link jsonEscape Special - hi def link jsonNumber Number + hi def link jsonNumber Delimiter hi def link jsonBraces Delimiter hi def link jsonNull Function - hi def link jsonBoolean Boolean + hi def link jsonBoolean Delimiter hi def link jsonKeyword Label - hi def link jsonNumError Error - hi def link jsonCommentError Error - hi def link jsonSemicolonError Error - hi def link jsonTrailingCommaError Error - hi def link jsonMissingCommaError Error - hi def link jsonStringSQError Error - hi def link jsonNoQuotesError Error - hi def link jsonTripleQuotesError Error + if (!exists("g:vim_json_warnings") || g:vim_json_warnings==1) + hi def link jsonNumError Error + hi def link jsonCommentError Error + hi def link jsonSemicolonError Error + hi def link jsonTrailingCommaError Error + hi def link jsonMissingCommaError Error + hi def link jsonStringSQError Error + hi def link jsonNoQuotesError Error + hi def link jsonTripleQuotesError Error + endif hi def link jsonQuote Quote hi def link jsonNoise Noise endif |