mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-08 11:33:52 -05:00
Add graphql support, closes #298
This commit is contained in:
@@ -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.
|
> 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 **won't affect your startup time**, as scripts are loaded only on demand\*.
|
||||||
- It **installs and updates 120+ times faster** than the <!--Package Count-->146<!--/Package Count--> packages it consists of.
|
- It **installs and updates 120+ times faster** than the <!--Package Count-->147<!--/Package Count--> packages it consists of.
|
||||||
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
- Solid syntax and indentation support (other features skipped). Only the best language packs.
|
||||||
- All unnecessary files are ignored (like enormous documentation from php support).
|
- All unnecessary files are ignored (like enormous documentation from php support).
|
||||||
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
- No support for esoteric languages, only most popular ones (modern too, like `slim`).
|
||||||
@@ -86,6 +86,7 @@ If you need full functionality of any plugin, please use it directly with your p
|
|||||||
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
|
||||||
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
|
||||||
- [gradle](https://github.com/tfnico/vim-gradle) (compiler)
|
- [gradle](https://github.com/tfnico/vim-gradle) (compiler)
|
||||||
|
- [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, autoload, ftplugin, after)
|
||||||
- [groovy-indent](https://github.com/vim-scripts/groovyindent-unix) (indent)
|
- [groovy-indent](https://github.com/vim-scripts/groovyindent-unix) (indent)
|
||||||
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
|
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
|
||||||
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
|
||||||
|
|||||||
@@ -19,3 +19,45 @@ fun! styledcomplete#CompleteSC(findstart, base)
|
|||||||
return s:funcref(a:findstart, a:base)
|
return s:funcref(a:findstart, a:base)
|
||||||
endif
|
endif
|
||||||
endfun
|
endfun
|
||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'styled-components') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim completion script
|
||||||
|
" Language: styled-components (js/ts)
|
||||||
|
" Maintainer: Karl Fleischmann <fleischmann.karl@gmail.com>
|
||||||
|
" URL: https://github.com/styled-components/vim-styled-components
|
||||||
|
|
||||||
|
fun! styledcomplete#CompleteSC(findstart, base)
|
||||||
|
if IsStyledDefinition(line('.'))
|
||||||
|
return csscomplete#CompleteCSS(a:findstart, a:base)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Only trigger original omnifunc if it was set in the first place
|
||||||
|
if exists('b:prevofu')
|
||||||
|
" create a funcref to call with the previous omnicomplete function
|
||||||
|
let s:funcref = function(b:prevofu)
|
||||||
|
return s:funcref(a:findstart, a:base)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'styled-components') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim completion script
|
||||||
|
" Language: styled-components (js/ts)
|
||||||
|
" Maintainer: Karl Fleischmann <fleischmann.karl@gmail.com>
|
||||||
|
" URL: https://github.com/styled-components/vim-styled-components
|
||||||
|
|
||||||
|
fun! styledcomplete#CompleteSC(findstart, base)
|
||||||
|
if IsStyledDefinition(line('.'))
|
||||||
|
return csscomplete#CompleteCSS(a:findstart, a:base)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Only trigger original omnifunc if it was set in the first place
|
||||||
|
if exists('b:prevofu')
|
||||||
|
" create a funcref to call with the previous omnicomplete function
|
||||||
|
let s:funcref = function(b:prevofu)
|
||||||
|
return s:funcref(a:findstart, a:base)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|||||||
27
after/syntax/javascript/graphql.vim
Normal file
27
after/syntax/javascript/graphql.vim
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
syn include @GraphQLSyntax syntax/graphql.vim
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
|
||||||
|
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
|
||||||
|
" Support expression interpolation ((${...})) inside template strings.
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression containedin=graphqlFold keepend
|
||||||
|
|
||||||
|
hi def link graphqlTemplateString jsTemplateString
|
||||||
|
hi def link graphqlTaggedTemplate jsTaggedTemplate
|
||||||
|
hi def link graphqlTemplateExpression jsTemplateExpression
|
||||||
|
|
||||||
|
syn cluster jsExpression add=graphqlTaggedTemplate
|
||||||
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
26
after/syntax/typescript/graphql.vim
Normal file
26
after/syntax/typescript/graphql.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
let s:current_syntax = b:current_syntax
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
syn include @GraphQLSyntax syntax/graphql.vim
|
||||||
|
if exists('s:current_syntax')
|
||||||
|
let b:current_syntax = s:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:tags = '\%(' . join(graphql#javascript_tags(), '\|') . '\)'
|
||||||
|
|
||||||
|
exec 'syntax region graphqlTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\`+ end=+`+ contains=@GraphQLSyntax,typescriptTemplateSubstitution extend'
|
||||||
|
exec 'syntax match graphqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=graphqlTemplateString'
|
||||||
|
|
||||||
|
" Support expression interpolation ((${...})) inside template strings.
|
||||||
|
syntax region graphqlTemplateExpression start=+${+ end=+}+ contained contains=typescriptTemplateSubstitution containedin=graphqlFold keepend
|
||||||
|
|
||||||
|
hi def link graphqlTemplateString typescriptTemplate
|
||||||
|
hi def link graphqlTemplateExpression typescriptTemplateSubstitution
|
||||||
|
|
||||||
|
syn cluster typescriptExpression add=graphqlTaggedTemplate
|
||||||
|
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
|
||||||
16
autoload/graphql.vim
Normal file
16
autoload/graphql.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim plugin
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if exists('g:autoloaded_graphql')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:autoloaded_graphql = 1
|
||||||
|
|
||||||
|
function! graphql#javascript_tags() abort
|
||||||
|
return get(g:, 'graphql_javascript_tags', ['gql', 'graphql', 'Relay.QL'])
|
||||||
|
endfunction
|
||||||
1
build
1
build
@@ -195,6 +195,7 @@ PACKS="
|
|||||||
gmpl:maelvalais/gmpl.vim
|
gmpl:maelvalais/gmpl.vim
|
||||||
gnuplot:vim-scripts/gnuplot-syntax-highlighting
|
gnuplot:vim-scripts/gnuplot-syntax-highlighting
|
||||||
go:fatih/vim-go:_BASIC
|
go:fatih/vim-go:_BASIC
|
||||||
|
graphql:jparise/vim-graphql:_ALL
|
||||||
gradle:tfnico/vim-gradle
|
gradle:tfnico/vim-gradle
|
||||||
groovy:vim-scripts/groovy.vim
|
groovy:vim-scripts/groovy.vim
|
||||||
groovy-indent:vim-scripts/groovyindent-unix
|
groovy-indent:vim-scripts/groovyindent-unix
|
||||||
|
|||||||
@@ -505,6 +505,14 @@ unlet s:cpo_save
|
|||||||
augroup end
|
augroup end
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
|
||||||
|
augroup filetypedetect
|
||||||
|
" graphql, from graphql.vim in jparise/vim-graphql:_ALL
|
||||||
|
" vint: -ProhibitAutocmdWithNoGroup
|
||||||
|
au BufRead,BufNewFile *.graphql,*.graphqls,*.gql setfiletype graphql
|
||||||
|
augroup end
|
||||||
|
endif
|
||||||
|
|
||||||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gradle') == -1
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gradle') == -1
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" gradle, from gradle.vim in tfnico/vim-gradle
|
" gradle, from gradle.vim in tfnico/vim-gradle
|
||||||
|
|||||||
22
ftplugin/graphql.vim
Normal file
22
ftplugin/graphql.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim filetype plugin
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if (exists('b:did_ftplugin'))
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
setlocal comments=:#
|
||||||
|
setlocal commentstring=#\ %s
|
||||||
|
setlocal formatoptions-=t
|
||||||
|
setlocal iskeyword+=$,@-@
|
||||||
|
setlocal softtabstop=2
|
||||||
|
setlocal shiftwidth=2
|
||||||
|
setlocal expandtab
|
||||||
|
|
||||||
|
let b:undo_ftplugin = 'setlocal com< cms< fo< isk< sts< sw< et<'
|
||||||
81
indent/graphql.vim
Normal file
81
indent/graphql.vim
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim indent file
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal autoindent
|
||||||
|
setlocal nocindent
|
||||||
|
setlocal nolisp
|
||||||
|
setlocal nosmartindent
|
||||||
|
|
||||||
|
setlocal indentexpr=GetGraphQLIndent()
|
||||||
|
setlocal indentkeys=0{,0},0),0[,0],0#,!^F,o,O
|
||||||
|
|
||||||
|
" If our indentation function already exists, we have nothing more to do.
|
||||||
|
if exists('*GetGraphQLIndent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:cpo_save = &cpoptions
|
||||||
|
set cpoptions&vim
|
||||||
|
|
||||||
|
" Check if the character at lnum:col is inside a string.
|
||||||
|
function s:InString(lnum, col)
|
||||||
|
return synIDattr(synID(a:lnum, a:col, 1), 'name') is# 'graphqlString'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function GetGraphQLIndent()
|
||||||
|
" If this is the first non-blank line, we have nothing more to do because
|
||||||
|
" all of our indentation rules are based on matching against earlier lines.
|
||||||
|
let l:prevlnum = prevnonblank(v:lnum - 1)
|
||||||
|
if l:prevlnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:line = getline(v:lnum)
|
||||||
|
|
||||||
|
" If this line contains just a closing bracket, find its matching opening
|
||||||
|
" bracket and indent the closing backet to match.
|
||||||
|
let l:col = matchend(l:line, '^\s*[]})]')
|
||||||
|
if l:col > 0 && !s:InString(v:lnum, l:col)
|
||||||
|
let l:bracket = l:line[l:col - 1]
|
||||||
|
call cursor(v:lnum, l:col)
|
||||||
|
|
||||||
|
if l:bracket is# '}'
|
||||||
|
let l:matched = searchpair('{', '', '}', 'bW')
|
||||||
|
elseif l:bracket is# ']'
|
||||||
|
let l:matched = searchpair('\[', '', '\]', 'bW')
|
||||||
|
elseif l:bracket is# ')'
|
||||||
|
let l:matched = searchpair('(', '', ')', 'bW')
|
||||||
|
else
|
||||||
|
let l:matched = -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:matched > 0 ? indent(l:matched) : virtcol('.') - 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If we're inside of a multiline string, continue with the same indentation.
|
||||||
|
if s:InString(v:lnum, matchend(l:line, '^\s*') + 1)
|
||||||
|
return indent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the previous line contained an opening bracket, and we are still in it,
|
||||||
|
" add indent depending on the bracket type.
|
||||||
|
if getline(l:prevlnum) =~# '[[{(]\s*$'
|
||||||
|
return indent(l:prevlnum) + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Default to the existing indentation level.
|
||||||
|
return indent(l:prevlnum)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpoptions = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
||||||
68
syntax/graphql.vim
Normal file
68
syntax/graphql.vim
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'graphql') != -1
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Vim syntax file
|
||||||
|
" Language: GraphQL
|
||||||
|
" Maintainer: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match graphqlComment "#.*$" contains=@Spell
|
||||||
|
|
||||||
|
syn match graphqlOperator "=" display
|
||||||
|
syn match graphqlOperator "!" display
|
||||||
|
syn match graphqlOperator "|" display
|
||||||
|
syn match graphqlOperator "\M..." display
|
||||||
|
|
||||||
|
syn keyword graphqlBoolean true false
|
||||||
|
syn keyword graphqlNull null
|
||||||
|
syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" display
|
||||||
|
syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+
|
||||||
|
syn region graphqlString start=+"""+ end=+"""+
|
||||||
|
|
||||||
|
syn keyword graphqlKeyword on nextgroup=graphqlType skipwhite
|
||||||
|
|
||||||
|
syn keyword graphqlStructure enum scalar type union nextgroup=graphqlType skipwhite
|
||||||
|
syn keyword graphqlStructure input interface subscription nextgroup=graphqlType skipwhite
|
||||||
|
syn keyword graphqlStructure implements nextgroup=graphqlType skipwhite
|
||||||
|
syn keyword graphqlStructure query mutation fragment nextgroup=graphqlName skipwhite
|
||||||
|
syn keyword graphqlStructure directive nextgroup=graphqlDirective skipwhite
|
||||||
|
syn keyword graphqlStructure extend nextgroup=graphqlStructure skipwhite
|
||||||
|
syn keyword graphqlStructure schema nextgroup=graphqlFold skipwhite
|
||||||
|
|
||||||
|
syn match graphqlDirective "\<@\h\w*\>" display
|
||||||
|
syn match graphqlVariable "\<\$\h\w*\>" display
|
||||||
|
syn match graphqlName "\<\h\w*\>" display
|
||||||
|
syn match graphqlType "\<_*\u\w*\>" display
|
||||||
|
syn match graphqlConstant "\<[A-Z_]\+\>" display
|
||||||
|
|
||||||
|
syn keyword graphqlMetaFields __schema __type __typename
|
||||||
|
|
||||||
|
syn region graphqlFold matchgroup=graphqlBraces start="{" end="}" transparent fold contains=ALLBUT,graphqlStructure
|
||||||
|
syn region graphqlList matchgroup=graphqlBraces start="\[" end="]" transparent contains=ALLBUT,graphqlDirective,graphqlStructure
|
||||||
|
|
||||||
|
hi def link graphqlComment Comment
|
||||||
|
hi def link graphqlOperator Operator
|
||||||
|
|
||||||
|
hi def link graphqlBraces Delimiter
|
||||||
|
|
||||||
|
hi def link graphqlBoolean Boolean
|
||||||
|
hi def link graphqlNull Keyword
|
||||||
|
hi def link graphqlNumber Number
|
||||||
|
hi def link graphqlString String
|
||||||
|
|
||||||
|
hi def link graphqlConstant Constant
|
||||||
|
hi def link graphqlDirective PreProc
|
||||||
|
hi def link graphqlName Identifier
|
||||||
|
hi def link graphqlMetaFields Special
|
||||||
|
hi def link graphqlKeyword Keyword
|
||||||
|
hi def link graphqlStructure Structure
|
||||||
|
hi def link graphqlType Type
|
||||||
|
hi def link graphqlVariable Identifier
|
||||||
|
|
||||||
|
syn sync minlines=500
|
||||||
|
|
||||||
|
let b:current_syntax = 'graphql'
|
||||||
Reference in New Issue
Block a user