commit
2a47b9c5af
|
@ -0,0 +1,16 @@
|
|||
use-grammars = { only = ["templ"] }
|
||||
|
||||
[[language]]
|
||||
name = "templ"
|
||||
auto-format = true
|
||||
scope = "source.templ"
|
||||
injection-regex = "templ"
|
||||
file-types = ["templ"]
|
||||
roots = ["go.mod"]
|
||||
comment-token = "//"
|
||||
language-server = { command = "templ", args = ["lsp"] }
|
||||
formatter = { command = "templ", args = ["fmt"] }
|
||||
|
||||
[[grammar]]
|
||||
name = "templ"
|
||||
source = { git = "https://github.com/vrischmann/tree-sitter-templ", rev = "9f63037ad08a58050d0582ef1ae0009bd0fbf2f1" }
|
|
@ -0,0 +1,8 @@
|
|||
# templ helix integration
|
||||
|
||||
1. Add [.helix/languages.toml](.helix/languages.toml) to your Helix languages config.
|
||||
2. Grab the [queries](queries/templ) and place them in `~/.config/helix/runtime/queries/templ`
|
||||
|
||||
Note: queries were obtained from [tree-sitter-templ](https://github.com/vrischmann/tree-sitter-templ), which likely will be up-to-date compared to this repo.
|
||||
The only extra query is [indents](queries/indents.scm).
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
module git.jojodev.com/jolheiser/templ-helix
|
||||
|
||||
go 1.20
|
||||
|
||||
require github.com/a-h/templ v0.2.334 // indirect
|
|
@ -0,0 +1,2 @@
|
|||
github.com/a-h/templ v0.2.334 h1:/mKupkgHGeSSeC0KiGRvmUoRGQJuku9VGVhRP1CeWgY=
|
||||
github.com/a-h/templ v0.2.334/go.mod h1:6Lfhsl3Z4/vXl7jjEjkJRCqoWDGjDnuKgzjYMDSddas=
|
|
@ -0,0 +1,97 @@
|
|||
; TODO(vincent): can we use injection ? I can't get it working
|
||||
|
||||
; A bunch of these are taken from:
|
||||
; * https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/go/highlights.scm
|
||||
; * https://github.com/tree-sitter/tree-sitter-go/blob/master/queries/highlights.scm
|
||||
|
||||
(package_identifier) @namespace
|
||||
|
||||
(parameter_declaration (identifier) @parameter)
|
||||
(variadic_parameter_declaration (identifier) @parameter)
|
||||
|
||||
(function_declaration
|
||||
name: (identifier) @function)
|
||||
|
||||
(type_spec name: (type_identifier) @type.definition)
|
||||
(type_identifier) @type
|
||||
(field_identifier) @property
|
||||
(identifier) @variable
|
||||
|
||||
; Function calls
|
||||
|
||||
(call_expression
|
||||
function: (identifier) @function.call)
|
||||
|
||||
(call_expression
|
||||
function: (selector_expression
|
||||
field: (field_identifier) @method.call))
|
||||
|
||||
;
|
||||
; These are Templ specific
|
||||
;
|
||||
|
||||
(component_declaration
|
||||
name: (component_identifier) @function)
|
||||
|
||||
(tag_start) @tag
|
||||
(tag_end) @tag
|
||||
(self_closing_tag) @tag
|
||||
(style_element) @tag
|
||||
|
||||
(attribute
|
||||
name: (attribute_name) @tag.attribute)
|
||||
(attribute
|
||||
value: (quoted_attribute_value) @string)
|
||||
|
||||
(element_text) @string.special
|
||||
(style_element_text) @string.special
|
||||
|
||||
(css_property
|
||||
name: (css_property_name) @attribute)
|
||||
|
||||
(expression) @function.method
|
||||
(dynamic_class_attribute_value) @function.method
|
||||
|
||||
(component_import
|
||||
name: (component_identifier) @function)
|
||||
|
||||
(component_render) @function.call
|
||||
|
||||
[
|
||||
"@"
|
||||
] @operator
|
||||
|
||||
[
|
||||
"func"
|
||||
"var"
|
||||
"const"
|
||||
"templ"
|
||||
"css"
|
||||
"type"
|
||||
"return"
|
||||
"struct"
|
||||
"range"
|
||||
"script"
|
||||
] @keyword
|
||||
|
||||
[
|
||||
"import"
|
||||
"package"
|
||||
] @include
|
||||
|
||||
[
|
||||
"else"
|
||||
"case"
|
||||
"switch"
|
||||
"if"
|
||||
"default"
|
||||
] @conditional
|
||||
|
||||
"for" @repeat
|
||||
|
||||
[
|
||||
(interpreted_string_literal)
|
||||
(raw_string_literal)
|
||||
(rune_literal)
|
||||
] @string
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[
|
||||
(component_declaration)
|
||||
] @indent
|
||||
|
||||
[
|
||||
"]"
|
||||
")"
|
||||
] @outdent
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
((script_block_text) @injection.content (#set! injection.language "javascript"))
|
||||
((script_element_text) @injection.content (#set! injection.language "javascript"))
|
||||
|
||||
((style_element_text) @injection.content (#set! injection.language "css"))
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
(component_declaration
|
||||
"templ" @structure.anchor
|
||||
(parameter_list
|
||||
"(" @structure.open
|
||||
")" @structure.close
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package main
|
||||
|
||||
import "strconv"
|
||||
|
||||
var red = "#ff0000";
|
||||
|
||||
css className() {
|
||||
background-color: #ffffff;
|
||||
color: { red };
|
||||
}
|
||||
|
||||
script graph(data []any) {
|
||||
const chart = LightweightCharts.createChart(document.body, { width: 400, height: 300 });
|
||||
const lineSeries = chart.addLineSeries();
|
||||
lineSeries.setData(data);
|
||||
}
|
||||
|
||||
templ hello(name string, vars []string) {
|
||||
<div>Hello, { name }</div>
|
||||
for i, path := range vars {
|
||||
<a href={ templ.URL(path) }>lol { strconv.Itoa(i) }/</a>
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue