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