forked from aniani/vim
		
	
		
			
	
	
		
			45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:         JSONC (JSON with Comments) | ||
|  | " Original Author:  Izhak Jakov <izhak724@gmail.com> | ||
|  | " Acknowledgement:  Based off of vim-jsonc maintained by Kevin Locke <kevin@kevinlocke.name> | ||
|  | "                   https://github.com/kevinoid/vim-jsonc | ||
|  | " License:          MIT | ||
|  | " Last Change:      2021-07-01 | ||
|  | 
 | ||
|  | " Ensure syntax is loaded once, unless nested inside another (main) syntax | ||
|  | " For description of main_syntax, see https://stackoverflow.com/q/16164549 | ||
|  | if !exists('g:main_syntax') | ||
|  |   if exists('b:current_syntax') && b:current_syntax ==# 'jsonc' | ||
|  |     finish | ||
|  |   endif | ||
|  |   let g:main_syntax = 'jsonc' | ||
|  | endif | ||
|  | 
 | ||
|  | " Based on vim-json syntax | ||
|  | runtime! syntax/json.vim | ||
|  | 
 | ||
|  | " Remove syntax group for comments treated as errors | ||
|  | if !exists("g:vim_json_warnings") || g:vim_json_warnings | ||
|  |   syn clear jsonCommentError | ||
|  | endif | ||
|  | 
 | ||
|  | syn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze\(\_s*\/\/.*\_s*\)*[}\]]/ contains=jsonString | ||
|  | syn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze\_s*\/\*\_.*\*\/\_s*[}\]]/ contains=jsonString | ||
|  | syn match jsonTrailingCommaError /\(,\)\+\ze\(\_s*\/\/.*\_s*\)*[}\]]/ | ||
|  | syn match jsonTrailingCommaError /\(,\)\+\ze\_s*\/\*\_.*\*\/\_s*[}\]]/ | ||
|  | 
 | ||
|  | " Define syntax matching comments and their contents | ||
|  | syn keyword jsonCommentTodo  FIXME NOTE TBD TODO XXX | ||
|  | syn region  jsonLineComment  start=+\/\/+ end=+$+   contains=@Spell,jsonCommentTodo keepend | ||
|  | syn region  jsonComment      start='/\*'  end='\*/' contains=@Spell,jsonCommentTodo fold | ||
|  | 
 | ||
|  | " Link comment syntax comment to highlighting | ||
|  | hi! def link jsonLineComment    Comment | ||
|  | hi! def link jsonComment        Comment | ||
|  | 
 | ||
|  | " Set/Unset syntax to avoid duplicate inclusion and correctly handle nesting | ||
|  | let b:current_syntax = 'jsonc' | ||
|  | if g:main_syntax ==# 'jsonc' | ||
|  |   unlet g:main_syntax | ||
|  | endif |