neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

jsonc.vim (1733B)


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