diff --git a/README.md b/README.md index 13b6558..545ef50 100644 --- a/README.md +++ b/README.md @@ -30,3 +30,10 @@ This plugin uses the generic SQL syntax by default. If you want to use a differe ```vim let g:javascript_sql_dialect = 'pgsql' ``` + +List of tags can be overridden using: + +```vim +let g:javascript_sql_tags = ['sql', 'customSql'] +" default is ['SQL'] +``` diff --git a/after/syntax/javascript/sql.vim b/after/syntax/javascript/sql.vim index 1b2ea55..fc5b01f 100644 --- a/after/syntax/javascript/sql.vim +++ b/after/syntax/javascript/sql.vim @@ -7,16 +7,26 @@ if exists('b:current_syntax') unlet b:current_syntax endif +if !exists('g:javascript_sql_tags') + let g:javascript_sql_tags = ['SQL'] +endif + exec 'syntax include @SQLSyntax syntax/' . g:javascript_sql_dialect . '.vim' if exists('s:current_syntax') let b:current_syntax = s:current_syntax endif -syntax region sqlTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=@SQLSyntax,jsTemplateExpression,jsSpecial extend -exec 'syntax match sqlTaggedTemplate +\%(SQL\)\%(`\)\@=+ nextgroup=sqlTemplateString' +let s:tags = '\%(' . join(g:javascript_sql_tags, '\|') . '\)' + +" will work only with pangloss/vim-javascript +" inspired by https://github.com/jparise/vim-graphql/blob/master/after/syntax/javascript/graphql.vim +exec 'syntax region sqlTemplateString matchgroup=jsTemplateString start=+' . s:tags . '\@20<=`+ skip=+\\\\\|\\`+ end=+`+ contains=@SQLSyntax,jsTemplateExpression,jsSpecial extend' +exec 'syntax match sqlTaggedTemplate +' . s:tags . '\ze`+ nextgroup=sqlTemplateString' +syntax region sqlTemplateExpression start=+${+ end=+}+ contained contains=jsTemplateExpression keepend hi def link sqlTemplateString jsTemplateString hi def link sqlTaggedTemplate jsTaggedTemplate +hi def link sqlTemplateExpression jsTemplateExpression -syn cluster jsExpression add=sqlTaggedTemplate +syn cluster jsExpression add=sqlTemplateString,sqlTaggedTemplate syn cluster sqlTaggedTemplate add=sqlTemplateString