xref: /vim-8.2.3635/runtime/syntax/jsonc.vim (revision 90df4b9d)
1*90df4b9dSBram Moolenaar" Vim syntax file
2*90df4b9dSBram Moolenaar" Language:         JSONC (JSON with Comments)
3*90df4b9dSBram Moolenaar" Original Author:  Izhak Jakov <[email protected]>
4*90df4b9dSBram Moolenaar" Acknowledgement:  Based off of vim-jsonc maintained by Kevin Locke <[email protected]>
5*90df4b9dSBram Moolenaar"                   https://github.com/kevinoid/vim-jsonc
6*90df4b9dSBram Moolenaar" License:          MIT
7*90df4b9dSBram Moolenaar" Last Change:      2021-07-01
8*90df4b9dSBram Moolenaar
9*90df4b9dSBram Moolenaar" Ensure syntax is loaded once, unless nested inside another (main) syntax
10*90df4b9dSBram Moolenaar" For description of main_syntax, see https://stackoverflow.com/q/16164549
11*90df4b9dSBram Moolenaarif !exists('g:main_syntax')
12*90df4b9dSBram Moolenaar  if exists('b:current_syntax') && b:current_syntax ==# 'jsonc'
13*90df4b9dSBram Moolenaar    finish
14*90df4b9dSBram Moolenaar  endif
15*90df4b9dSBram Moolenaar  let g:main_syntax = 'jsonc'
16*90df4b9dSBram Moolenaarendif
17*90df4b9dSBram Moolenaar
18*90df4b9dSBram Moolenaar" Based on vim-json syntax
19*90df4b9dSBram Moolenaarruntime! syntax/json.vim
20*90df4b9dSBram Moolenaar
21*90df4b9dSBram Moolenaar" Remove syntax group for comments treated as errors
22*90df4b9dSBram Moolenaarif !exists("g:vim_json_warnings") || g:vim_json_warnings
23*90df4b9dSBram Moolenaar  syn clear jsonCommentError
24*90df4b9dSBram Moolenaarendif
25*90df4b9dSBram Moolenaar
26*90df4b9dSBram Moolenaarsyn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze\(\_s*\/\/.*\_s*\)*[}\]]/ contains=jsonString
27*90df4b9dSBram Moolenaarsyn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze\_s*\/\*\_.*\*\/\_s*[}\]]/ contains=jsonString
28*90df4b9dSBram Moolenaarsyn match jsonTrailingCommaError /\(,\)\+\ze\(\_s*\/\/.*\_s*\)*[}\]]/
29*90df4b9dSBram Moolenaarsyn match jsonTrailingCommaError /\(,\)\+\ze\_s*\/\*\_.*\*\/\_s*[}\]]/
30*90df4b9dSBram Moolenaar
31*90df4b9dSBram Moolenaar" Define syntax matching comments and their contents
32*90df4b9dSBram Moolenaarsyn keyword jsonCommentTodo  FIXME NOTE TBD TODO XXX
33*90df4b9dSBram Moolenaarsyn region  jsonLineComment  start=+\/\/+ end=+$+   contains=@Spell,jsonCommentTodo keepend
34*90df4b9dSBram Moolenaarsyn region  jsonComment      start='/\*'  end='\*/' contains=@Spell,jsonCommentTodo fold
35*90df4b9dSBram Moolenaar
36*90df4b9dSBram Moolenaar" Link comment syntax comment to highlighting
37*90df4b9dSBram Moolenaarhi! def link jsonLineComment    Comment
38*90df4b9dSBram Moolenaarhi! def link jsonComment        Comment
39*90df4b9dSBram Moolenaar
40*90df4b9dSBram Moolenaar" Set/Unset syntax to avoid duplicate inclusion and correctly handle nesting
41*90df4b9dSBram Moolenaarlet b:current_syntax = 'jsonc'
42*90df4b9dSBram Moolenaarif g:main_syntax ==# 'jsonc'
43*90df4b9dSBram Moolenaar  unlet g:main_syntax
44*90df4b9dSBram Moolenaarendif
45