summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2020-08-18 23:25:22 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2020-08-18 23:25:22 +0200
commitf7302d92629d29eb970c3d5fbb2f76ae6d6cf50a (patch)
tree729ab08663a63c87f0740f4b6253e97b9c46a3c9
parent7e38f4288a4f7199240d8a8fce87c8d0cc0198c3 (diff)
downloadvim-polyglot-f7302d92629d29eb970c3d5fbb2f76ae6d6cf50a.tar.gz
vim-polyglot-f7302d92629d29eb970c3d5fbb2f76ae6d6cf50a.zip
Add jq syntax, closes #502
-rw-r--r--README.md3
-rwxr-xr-xbuild1
-rwxr-xr-xbuild.py1
-rw-r--r--ftdetect/polyglot.vim5
-rw-r--r--ftplugin/jq.vim5
-rw-r--r--syntax/jq.vim134
6 files changed, 148 insertions, 1 deletions
diff --git a/README.md b/README.md
index d8b91fdf..f52e0fee 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ A collection of language packs for Vim.
> One to rule them all, one to find them, one to bring them all and in the darkness bind them.
- It **won't affect your startup time**, as scripts are loaded only on demand\*.
-- It **installs and updates 120+ times faster** than the <!--Package Count-->155<!--/Package Count--> packages it consists of.
+- It **installs and updates 120+ times faster** than the <!--Package Count-->156<!--/Package Count--> packages it consists of.
- Solid syntax and indentation support (other features skipped). Only the best language packs.
- All unnecessary files are ignored (like enormous documentation from php support).
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
@@ -106,6 +106,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras)
- [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent)
- [jinja](https://github.com/lepture/vim-jinja) (syntax, indent)
+- [jq](https://github.com/vito-c/jq.vim) (syntax, ftplugin)
- [json5](https://github.com/GutenYe/json5.vim) (syntax)
- [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin)
- [jsonnet](https://github.com/google/vim-jsonnet) (syntax, autoload, ftplugin)
diff --git a/build b/build
index 78e60218..5a640f38 100755
--- a/build
+++ b/build
@@ -200,6 +200,7 @@ PACKS="
javascript:pangloss/vim-javascript:_JAVASCRIPT
jenkins:martinda/Jenkinsfile-vim-syntax
jinja:lepture/vim-jinja
+ jq:vito-c/jq.vim
json5:GutenYe/json5.vim
json:elzr/vim-json
jsonnet:google/vim-jsonnet
diff --git a/build.py b/build.py
index 74d76918..24243b00 100755
--- a/build.py
+++ b/build.py
@@ -256,6 +256,7 @@ language("Zir", extensions=[".zir"], polyglot="zig", filetype="zir")
language("Jsonnet")
language("Fennel", extensions=[".fnl"])
language("mcfunction")
+language("JSONiq", extra_filenames=[".jqrc"], filetype="jq", polyglot="jq")
lines.append('" restore Vi compatibility settings')
lines.append('let &cpo = s:cpo_save')
diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim
index 5909463b..24b77afb 100644
--- a/ftdetect/polyglot.vim
+++ b/ftdetect/polyglot.vim
@@ -1155,6 +1155,11 @@ if index(g:polyglot_disabled, 'mcfunction') == -1
au BufNewFile,BufRead *.mcfunction set ft=mcfunction
endif
+if index(g:polyglot_disabled, 'jq') == -1
+ au BufNewFile,BufRead *.jq set ft=jq
+ au BufNewFile,BufRead {.,}jqrc set ft=jq
+endif
+
" restore Vi compatibility settings
let &cpo = s:cpo_save
unlet s:cpo_save \ No newline at end of file
diff --git a/ftplugin/jq.vim b/ftplugin/jq.vim
new file mode 100644
index 00000000..0e7a3a54
--- /dev/null
+++ b/ftplugin/jq.vim
@@ -0,0 +1,5 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jq') == -1
+
+setlocal commentstring=#%s
+
+endif
diff --git a/syntax/jq.vim b/syntax/jq.vim
new file mode 100644
index 00000000..a767d522
--- /dev/null
+++ b/syntax/jq.vim
@@ -0,0 +1,134 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jq') == -1
+
+" Vim syntax file
+" Language: jq
+" Maintainer: Vito C <vito.blog@gmail.com>
+" Last Change: 2015 Nov 28
+
+" Quit when a (custom) syntax file was already loaded
+if exists('b:current_syntax')
+ finish
+endif
+
+" syn include @jqHtml syntax/html.vim " Doc comment HTML
+
+" jqTodo
+syntax keyword jqTodo contained TODO FIXME NOTE XXX
+
+" jqKeywords
+syntax keyword jqKeywords and or not empty
+syntax keyword jqKeywords try catch
+syntax keyword jqKeywords reduce as label break foreach
+syntax keyword jqKeywords import include module modulemeta
+syntax keyword jqKeywords env nth has in while error stderr debug
+
+" jqConditional
+syntax keyword jqConditional if then elif else end
+
+" jqConditions
+syntax keyword jqCondtions true false null
+
+" jqSpecials
+syntax keyword jqType type
+syntax match jqType /[\|;]/ " not really a type I did this for coloring reasons though :help group-name
+syntax region jqParentheses start=+(+ end=+)+ fold transparent
+
+" jq Functions
+syntax keyword jqFunction add all any arrays ascii_downcase floor
+syntax keyword jqFunction ascii_upcase booleans bsearch builtins capture combinations
+syntax keyword jqFunction \contains del delpaths endswith explode
+syntax keyword jqFunction finites first flatten format from_entries
+syntax keyword jqFunction fromdate fromdateiso8601 fromjson fromstream get_jq_origin
+syntax keyword jqFunction get_prog_origin get_search_list getpath gmtime group_by
+syntax keyword jqFunction gsub halt halt_error implode index indices infinite
+syntax keyword jqFunction input input_filename input_line_number inputs inside
+syntax keyword jqFunction isempty isfinite isinfinite isnan isnormal iterables
+syntax keyword jqFunction join keys keys_unsorted last leaf_paths
+syntax keyword jqFunction length limit localtime ltrimstr map map_values
+syntax keyword jqFunction match max max_by min min_by
+syntax keyword jqFunction mktime nan normals now
+syntax keyword jqFunction nulls numbers objects path paths range
+syntax keyword jqFunction recurse recurse_down repeat reverse rindex
+syntax keyword jqFunction rtrimstr scalars scalars_or_empty scan select
+syntax keyword jqFunction setpath sort sort_by split splits with_entries
+syntax keyword jqFunction startswith strflocaltime strftime strings strptime sub
+syntax keyword jqFunction test to_entries todate todateiso8601 tojson __loc__
+syntax keyword jqFunction tonumber tostream tostring transpose truncate_stream
+syntax keyword jqFunction unique unique_by until utf8bytelength values walk
+" TODO: $__loc__ is going to be a pain
+
+" jq Math Functions
+syntax keyword jqFunction acos acosh asin asinh atan atanh cbrt ceil cos cosh
+syntax keyword jqFunction erf erfc exp exp10 exp2 expm1 fabs floor gamma j0 j1
+syntax keyword jqFunction lgamma lgamma_r log log10 log1p log2 logb nearbyint
+syntax keyword jqFunction pow10 rint round significand sin sinh sqrt tan tanh
+syntax keyword jqFunction tgamma trunc y0 y1
+syntax keyword jqFunction atan2 copysign drem fdim fmax fmin fmod frexp hypot
+syntax keyword jqFunction jn ldexp modf nextafter nexttoward pow remainder
+syntax keyword jqFunction scalb scalbln yn
+syntax keyword jqFunction fma
+
+" jq SQL-style Operators
+syntax keyword jqFunction INDEX JOIN IN
+
+" Comments
+syntax match jqComment "#.*" contains=jqTodo
+
+" Variables
+syn match jqVariables /$[_A-Za-z0-9]\+/
+
+" Definition
+syntax keyword jqKeywords def nextgroup=jqNameDefinition skipwhite
+syn match jqNameDefinition /\<[_A-Za-z0-9]\+\>/ contained nextgroup=jqPostNameDefinition
+syn match jqNameDefinition /`[^`]\+`/ contained nextgroup=jqPostNameDefinition
+
+" Strings
+syn region jqError start=+'+ end=+'\|$\|[;)]\@=+
+syn region jqString matchgroup=jqQuote
+ \ start=+"+ skip=+\\"+ end=+"+
+ \ contains=@Spell,jqInterpolation
+syn region jqInterpolation matchgroup=jqInterpolationDelimiter
+ \ start=+\%([^\\]\%(\\\\\)*\\\)\@<!\\(+ end=+)+
+ \ contained contains=TOP
+
+" Operators
+syn match jqOperator /:\|\([-+*/%<>=]\|\/\/\)=\?\|[!|]=\|?\/\//
+"syn region jqRange matchgroup=jqSquareBracket start=+\[+ skip=+:+ end=+\]+
+
+" Errors
+syn keyword jqError _assign _flatten _modify _nwise _plus _negate _minus _multiply
+syn keyword jqError _divide _mod _strindices _equal _notequal _less _greater _lesseq
+syn keyword jqError _greatereq _sort_by_impl _group_by_impl _min_by_impl _max_by_impl _match_impl _input
+" TODO: these errors should show up when doing def _flatten: as well
+
+" Numbers
+syn match jqNumber /\<0[dDfFlL]\?\>/ " Just a bare 0
+syn match jqNumber /\<[1-9]\d*[dDfFlL]\?\>/ " A multi-digit number - octal numbers with leading 0's are deprecated in Scala
+
+if !exists('jq_quote_highlight')
+ highlight link jqQuote String
+else
+ highlight link jqQuote Type
+endif
+
+hi link jqCondtions Boolean
+hi link jqVariables Identifier
+hi link jqNameDefinition Function
+hi link jqTodo Todo
+hi link jqComment Comment
+hi link jqKeywords Keyword
+hi link jqType Type
+hi link jqOperator Operator
+hi link jqFunction Function
+hi link jqError Error
+hi link jqString String
+hi link jqInterpolationDelimiter Delimiter
+"hi link jqStatement Statement
+hi link jqConditional Conditional
+"hi link jqRepeat Repeat
+"hi link jqException Exception
+"hi link jqInclude Include
+"hi link jqDecorator Define
+hi link jqNumber Number
+
+endif