nvim-treesitter/runtime/queries/objectscript/injections.scm

125 lines
3.5 KiB
Scheme
Raw Normal View History

2025-11-04 06:20:54 -05:00
; Target method_body_content and reparse it using
; objectscript_core
(embedded_html
(angled_bracket_fenced_text) @injection.content
(#set! injection.language "html")
(#set! injection.include-children "false")
(#set! injection.combined "true"))
(embedded_sql
(_
(paren_fenced_text) @injection.content)
(#set! injection.language "sql")
(#set! injection.include-children "false")
(#set! injection.combined "true"))
(embedded_js
(angled_bracket_fenced_text) @injection.content
(#set! injection.language "javascript")
(#set! injection.include-children "false")
(#set! injection.combined "true"))
(embedded_xml
(angled_bracket_fenced_text) @injection.content
(#set! injection.language "xml")
(#set! injection.include-children "false")
(#set! injection.combined "true"))
([
(line_comment_1)
(line_comment_2)
(line_comment_3)
(block_comment)
(documatic_line)
] @injection.content
(#set! injection.language "comment"))
; Keywords, one of type language = "python", none of type codemode
(method_definition
keywords: (_
(kw_External_Language
rhs: _ @injection.language))
body: (_) @injection.content
(#set! injection.include-children "true"))
(trigger
keywords: (_
(kw_External_Language
rhs: _ @injection.language))
body: (_) @injection.content
(#set! injection.include-children "true"))
; A query must be of type %SQLQuery to have an SQL body, otherwise the body
; is empty
(query
type: (_
(typename
(identifier) @_querytype
(#eq? @_querytype "%SQLQuery")))
(_
(query_body_content) @injection.content)
(#set! injection.language "sql")
(#set! injection.include-children "true"))
; XDATA blocks. There's a MimeType keyword that defines the content-type
; To prevent overlapping matches, we use a different body for the case where
; no MimeType is given and default to XML, otherwise we extract the language
; from the mimetype.
(xdata
keywords: (_
(kw_MimeType
rhs: _ @_mimetype
(#eq? @_mimetype "\"text/markdown\"")))
body: (xdata_body_content_any) @injection.content
(#set! injection.language "markdown")
(#set! injection.include-children "true"))
(xdata
keywords: (_
(kw_MimeType
rhs: _ @_mimetype
(#eq? @_mimetype "\"text/xml\"")))
; NOTE: Since MimeType is given, we match xdata_body_content_any not xml
body: (xdata_body_content_any) @injection.content
(#set! injection.language "xml")
(#set! injection.include-children "true"))
(xdata
keywords: (_
(kw_MimeType
rhs: _ @_mimetype
(#eq? @_mimetype "\"text/html\"")))
body: (xdata_body_content_any) @injection.content
(#set! injection.language "html")
(#set! injection.include-children "true"))
(xdata
keywords: (_
(kw_MimeType
rhs: _ @_mimetype
(#eq? @_mimetype "\"application/json\"")))
body: (xdata_body_content_any) @injection.content
(#set! injection.language "json")
(#set! injection.include-children "true"))
(xdata
keywords: (_
(kw_MimeType
rhs: _ @_mimetype
(#eq? @_mimetype "\"text/css\"")))
body: (xdata_body_content_any) @injection.content
(#set! injection.language "css")
(#set! injection.include-children "true"))
; Match an unspecified XDATA -- defaults to XML
(xdata
body: (xdata_body_content_xml) @injection.content
(#set! injection.language "xml")
(#set! injection.include-children "true"))
; Storage definition is XML
(storage
body: (_) @injection.content
(#set! injection.language "xml")
(#set! injection.include-children "true"))