Module: TreeHaver::Backends::Tslp
- Defined in:
- lib/tree_haver/backends/tslp.rb
Overview
TSLP backend using tree_sitter_language_pack's on-demand parser API.
This backend intentionally requires the real parser API. The language-pack process API is not a TreeHaver parser backend and must not be used as a merge-gem integration surface.
Defined Under Namespace
Classes: Language, Node, Parser, Tree
Constant Summary collapse
- PARSER_SMOKE_SOURCES =
{ 'json' => '{}', 'json5' => '{}', 'bash' => "echo tree_haver\n", 'go' => "package main\nfunc main() {}\n", 'html' => "<!doctype html>\n<title>TreeHaver</title>\n", 'markdown' => "# TreeHaver\n", 'ruby' => "class TreeHaverSmoke\nend\n", 'rust' => "fn main() {}\n", 'typescript' => "export const treeHaver = true;\n", 'toml' => "title = \"tree_haver\"\n", 'yaml' => "tree_haver: true\n" }.freeze
- DEFAULT_PARSER_SMOKE_SOURCE =
''
Class Attribute Summary collapse
-
.unavailable_reason ⇒ Object
readonly
Returns the value of attribute unavailable_reason.
Class Method Summary collapse
- .available? ⇒ Boolean
- .capabilities ⇒ Object
- .parser_available_for?(language_name) ⇒ Boolean
- .reset! ⇒ Object
Class Attribute Details
.unavailable_reason ⇒ Object (readonly)
Returns the value of attribute unavailable_reason.
32 33 34 |
# File 'lib/tree_haver/backends/tslp.rb', line 32 def unavailable_reason @unavailable_reason end |
Class Method Details
.available? ⇒ Boolean
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/tree_haver/backends/tslp.rb', line 34 def available? return @loaded if @load_attempted @load_attempted = true begin require 'tree_sitter_language_pack' unless defined?(::TreeSitterLanguagePack) @loaded = parser_api_available? if !@loaded && @unavailable_reason.to_s.empty? @unavailable_reason = 'tree_sitter_language_pack parser API is not exposed' end rescue LoadError => e @loaded = false @unavailable_reason = e. rescue StandardError => e @loaded = false @unavailable_reason = e. end @loaded end |
.capabilities ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/tree_haver/backends/tslp.rb', line 62 def capabilities return {} unless available? { backend: :tslp, query: false, bytes_field: true, incremental: false, comment_support: :nodes_only, language_pack: true } end |
.parser_available_for?(language_name) ⇒ Boolean
75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/tree_haver/backends/tslp.rb', line 75 def parser_available_for?(language_name) return false unless available? name = language_name.to_s return @language_availability.fetch(name) if @language_availability.key?(name) @language_availability[name] = smoke_parse_language(name) @language_unavailable_reasons[name] = @unavailable_reason unless @language_availability.fetch(name) @language_availability.fetch(name) rescue StandardError => e @unavailable_reason = e. @language_unavailable_reasons[language_name.to_s] = e. false end |
.reset! ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/tree_haver/backends/tslp.rb', line 54 def reset! @load_attempted = false @loaded = false @unavailable_reason = nil @language_availability = {} @language_unavailable_reasons = {} end |