diff --git a/vis/.config/vis/lexers/go_ext.lua b/vis/.config/vis/lexers/go_ext.lua new file mode 100644 index 0000000..0959c65 --- /dev/null +++ b/vis/.config/vis/lexers/go_ext.lua @@ -0,0 +1,31 @@ +-- Copyright 2006-2025 Mitchell. See LICENSE. +-- go with SQL LPeg lexer. + +local lexer = lexer +local starts_line = lexer.starts_line +local B, P, S = lpeg.B, lpeg.P, lpeg.S + +local lex = lexer.new(..., {inherit = lexer.load('go')}) + +local open_brace = lex:tag(lexer.OPERATOR, P('{')) +local close_brace = lex:tag(lexer.OPERATOR, P('}')) +local backtick = lex:tag(lexer.CODE, P('`')) +local ws = lex:get_rule('whitespace') + +local tpl = lexer.new("template") +tpl:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.word_match('if else end with range break define continue template block'))) +tpl:add_rule('constant', lex:get_rule('constant')) +tpl:add_rule('operator', lex:get_rule('operator') + lex:tag(lexer.OPERATOR, S('$'))) +local func = lexer.after_set(' \t\n{|', lexer.word) +tpl:add_rule('function', lex:tag(lexer.FUNCTION, func)) +tpl:add_rule('identifier', lex:get_rule('identifier')) +tpl:add_rule('string', lex:get_rule('string')) +tpl:add_rule('number', lex:get_rule('number')) + +local sql = lexer.load('sql') +local sql_kwd = lexer.word_match('ALTER CREATE DELETE DROP GRANT INSERT SELECT UPDATE WITH') +sql:embed(tpl, open_brace * open_brace, close_brace * close_brace) + +lex:embed(sql, backtick * #(ws^0 * sql_kwd), backtick) + +return lex diff --git a/vis/.config/vis/visrc.lua b/vis/.config/vis/visrc.lua index 77e2ed8..464fc4c 100644 --- a/vis/.config/vis/visrc.lua +++ b/vis/.config/vis/visrc.lua @@ -23,6 +23,10 @@ local plugins = { plug.init(plugins, true) +vis.ftdetect.filetypes.go_ext = vis.ftdetect.filetypes.go +vis.ftdetect.filetypes.go = nil +plug.plugins.lspc.ls_map.go_ext = plug.plugins.lspc.ls_map.go + vis.ftdetect.filetypes.templ = { ext = { "%.templ$" }, }