lite-xl-plugins icon indicating copy to clipboard operation
lite-xl-plugins copied to clipboard

Wish to provide verilog and systemverilog language plug-ins

Open shengqilong opened this issue 11 months ago • 7 comments

Hope to provide verilog and systemverilog language plug-ins, support verilog and systemverilog syntax highlighting

shengqilong avatar Mar 14 '24 01:03 shengqilong

@shengqilong can you test this code snippet ? i wrote it as a concept and requires further testing. report anything back to me.

-- mod-version:3

local syntax = require "core.syntax"

syntax.add {
    name = "Verilog/SystemVerilog",
    files = { "%.v$", "%.sv$" },
    block_comment = { "/*", "*/" },  -- Block comment pattern
    comment = "//",
    patterns = {
        { pattern = "//.*", type = "comment"  },
        { pattern = { "/%*", "%*/" },   type = "comment"  },
        { pattern = { '"', '"', '\\' }, type = "string" },  -- Double quoted string
        { pattern = [=[(['"])(\\\1|.)-%1]=], type = "string" },  -- Single quoted string (there is some issue but it works)
        { pattern = "0[bB][01]+%W", type = "number" },  -- Binary number
        { pattern = "[0-1]+[bB]%W", type = "number" },  -- Binary number
        { pattern = "0[xX][%da-fA-F]+%W", type = "number" },  -- Hexadecimal number
        { pattern = "%x+[hH]%W", type = "number" },  -- Hexadecimal number
        { pattern = "%d+[%d%.eE]*f?", type = "number" },  -- Floating point number
        { pattern = "%.?%d+f?", type = "number" },  -- Floating point number
        { pattern = "%%+[%a_][%w_]*", type = "keyword2" },  -- SystemVerilog macros
        { pattern = "[%+%-=/%*%^%%<>!~|&%$]", type = "operator" },  -- Operators
        { pattern = "[%a_][%w_]*:%W", type = "function" },  -- Labels
        { pattern = "[%a_][%w_]*", type = "symbol" },  -- Symbols/Identifiers
        { pattern = "%.%.%a+", type = "normal" }  -- Preprocessor directives
    },
    symbols = {
        -- Verilog/SystemVerilog keywords
        ["always"] = "keyword",
        ["and"] = "keyword",
        ["assign"] = "keyword",
        ["automatic"] = "keyword",
        ["begin"] = "keyword",
        ["case"] = "keyword",
        ["casex"] = "keyword",
        ["casez"] = "keyword",
        ["cell"] = "keyword",
        ["cmos"] = "keyword",
        ["config"] = "keyword",
        ["deassign"] = "keyword",
        ["default"] = "keyword",
        ["defparam"] = "keyword",
        ["design"] = "keyword",
        ["disable"] = "keyword",
        ["edge"] = "keyword",
        ["else"] = "keyword",
        ["end"] = "keyword",
        ["endcase"] = "keyword",
        ["endconfig"] = "keyword",
        ["endfunction"] = "keyword",
        ["endgenerate"] = "keyword",
        ["endmodule"] = "keyword",
        ["endprimitive"] = "keyword",
        ["endspecify"] = "keyword",
        ["endtable"] = "keyword",
        ["endtask"] = "keyword",
        ["event"] = "keyword",
        ["for"] = "keyword",
        ["force"] = "keyword",
        ["forever"] = "keyword",
        ["fork"] = "keyword",
        ["function"] = "keyword",
        ["generate"] = "keyword",
        ["genvar"] = "keyword",
        ["highz0"] = "keyword",
        ["highz1"] = "keyword",
        ["if"] = "keyword",
        ["ifnone"] = "keyword",
        ["incdir"] = "keyword",
        ["include"] = "keyword",
        ["initial"] = "keyword",
        ["inout"] = "keyword",
        ["input"] = "keyword",
        ["instance"] = "keyword",
        ["integer"] = "keyword",
        ["join"] = "keyword",
        ["large"] = "keyword",
        ["liblist"] = "keyword",
        ["library"] = "keyword",
        ["localparam"] = "keyword",
        ["macromodule"] = "keyword",
        ["medium"] = "keyword",
        ["module"] = "keyword",
        ["nand"] = "keyword",
        ["negedge"] = "keyword",
        ["nmos"] = "keyword",
        ["nor"] = "keyword",
        ["noshowcancelled"] = "keyword",
        ["not"] = "keyword",
        ["notif0"] = "keyword",
        ["notif1"] = "keyword",
        ["or"] = "keyword",
        ["output"] = "keyword",
        ["parameter"] = "keyword",
        ["pmos"] = "keyword",
        ["posedge"] = "keyword",
        ["primitive"] = "keyword",
        ["pull0"] = "keyword",
        ["pull1"] = "keyword",
        ["pulldown"] = "keyword",
        ["pullup"] = "keyword",
        ["pulsestyle_ondetect"] = "keyword",
        ["pulsestyle_onevent"] = "keyword",
        ["rcmos"] = "keyword",
        ["real"] = "keyword",
        ["realtime"] = "keyword",
        ["reg"] = "keyword",
        ["release"] = "keyword",
        ["repeat"] = "keyword",
        ["rnmos"] = "keyword",
        ["rpmos"] = "keyword",
        ["rtran"] = "keyword",
        ["rtranif0"] = "keyword",
        ["rtranif1"] = "keyword",
        ["scalared"] = "keyword",
        ["showcancelled"] = "keyword",
        ["signed"] = "keyword",
        ["small"] = "keyword",
        ["specify"] = "keyword",
        ["specparam"] = "keyword",
        ["strong0"] = "keyword",
        ["strong1"] = "keyword",
        ["supply0"] = "keyword",
        ["supply1"] = "keyword",
        ["table"] = "keyword",
        ["task"] = "keyword",
        ["time"] = "keyword",
        ["tran"] = "keyword",
        ["tranif0"] = "keyword",
        ["tranif1"] = "keyword",
        ["tri"] = "keyword",
        ["tri0"] = "keyword",
        ["tri1"] = "keyword",
        ["triand"] = "keyword",
        ["trior"] = "keyword",
        ["trireg"] = "keyword",
        ["unsigned"] = "keyword",
        ["use"] = "keyword",
        ["vectored"] = "keyword",
        ["wait"] = "keyword",
        ["wand"] = "keyword",
        ["weak0"] = "keyword",
        ["weak1"] = "keyword",
        ["while"] = "keyword",
        ["wire"] = "keyword",
        ["wor"] = "keyword",
        ["xnor"] = "keyword",
        ["xor"] = "keyword",
        -- SystemVerilog additional keywords
        ["alias"] = "keyword",
        ["always_comb"] = "keyword",
        ["always_ff"] = "keyword",
        ["always_latch"] = "keyword",
        ["assert"] = "keyword",
        ["assume"] = "keyword",
        ["before"] = "keyword",
        ["bind"] = "keyword",
        ["bins"] = "keyword",
        ["binsof"] = "keyword",
        ["bit"] = "keyword",
        ["break"] = "keyword",
        ["byte"] = "keyword",
        ["shortint"] = "keyword",
        ["int"] = "keyword",
        ["longint"] = "keyword",
        ["logic"] = "keyword",
        ["shortreal"] = "keyword",
        ["realtime"] = "keyword",
        ["void"] = "keyword",
    }
}

kemzops avatar Mar 14 '24 14:03 kemzops

image This code should work, but there may be issues with quotes. I'll check other IDE extensions so maybe i will find better implementation. Let me know if you encounter any problems or have suggestions for improvement.

For reference, you can find more information in the Lite XL documentation creating syntaxes developer guide.

kemzops avatar Mar 14 '24 14:03 kemzops

Thank you so much, this code does work,but can an expression like 1'b1 be recognized as a number?

shengqilong avatar Mar 15 '24 09:03 shengqilong

Thank you so much, this code does work,but can an expression like 1'b1 be recognized as a number?

shengqilong avatar Mar 15 '24 09:03 shengqilong

files with .v extension cannot be highlighted,why?

shengqilong avatar Mar 15 '24 09:03 shengqilong

files with .v extension cannot be highlighted,why?

it should work ? its working for me... and about the number thing, you can update the regex if you wish... check the docs

kemzops avatar Mar 15 '24 23:03 kemzops

The .v file extension is also for the V programming language files. There may be compatibility issues.

PerilousBooklet avatar May 03 '24 09:05 PerilousBooklet