textbringer-tree-sitter 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/CLAUDE.md +76 -0
  3. data/LICENSE.txt +13 -0
  4. data/README.md +125 -0
  5. data/Rakefile +12 -0
  6. data/exe/textbringer-tree-sitter +513 -0
  7. data/ext/textbringer_tree_sitter/extconf.rb +125 -0
  8. data/lib/textbringer/tree_sitter/node_maps/bash.rb +57 -0
  9. data/lib/textbringer/tree_sitter/node_maps/c.rb +64 -0
  10. data/lib/textbringer/tree_sitter/node_maps/cobol.rb +94 -0
  11. data/lib/textbringer/tree_sitter/node_maps/csharp.rb +107 -0
  12. data/lib/textbringer/tree_sitter/node_maps/groovy.rb +77 -0
  13. data/lib/textbringer/tree_sitter/node_maps/haml.rb +34 -0
  14. data/lib/textbringer/tree_sitter/node_maps/hcl.rb +53 -0
  15. data/lib/textbringer/tree_sitter/node_maps/html.rb +33 -0
  16. data/lib/textbringer/tree_sitter/node_maps/java.rb +98 -0
  17. data/lib/textbringer/tree_sitter/node_maps/javascript.rb +82 -0
  18. data/lib/textbringer/tree_sitter/node_maps/json.rb +31 -0
  19. data/lib/textbringer/tree_sitter/node_maps/pascal.rb +102 -0
  20. data/lib/textbringer/tree_sitter/node_maps/php.rb +100 -0
  21. data/lib/textbringer/tree_sitter/node_maps/python.rb +72 -0
  22. data/lib/textbringer/tree_sitter/node_maps/ruby.rb +82 -0
  23. data/lib/textbringer/tree_sitter/node_maps/rust.rb +81 -0
  24. data/lib/textbringer/tree_sitter/node_maps/yaml.rb +45 -0
  25. data/lib/textbringer/tree_sitter/node_maps.rb +78 -0
  26. data/lib/textbringer/tree_sitter/version.rb +7 -0
  27. data/lib/textbringer/tree_sitter_adapter.rb +166 -0
  28. data/lib/textbringer/tree_sitter_config.rb +91 -0
  29. data/lib/textbringer_plugin.rb +141 -0
  30. data/parsers/darwin-arm64/.gitkeep +0 -0
  31. data/parsers/darwin-x64/.gitkeep +0 -0
  32. data/parsers/linux-arm64/.gitkeep +0 -0
  33. data/parsers/linux-x64/.gitkeep +0 -0
  34. data/scripts/build_parsers.sh +77 -0
  35. data/scripts/test_parser.rb +223 -0
  36. metadata +139 -0
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ # Pascal の tree-sitter ノードタイプは kXxx 形式が多い
7
+ PASCAL_FEATURES = {
8
+ comment: %i[comment],
9
+ string: %i[string],
10
+ keyword: %i[
11
+ kBegin
12
+ kEnd
13
+ kIf
14
+ kThen
15
+ kElse
16
+ kFor
17
+ kTo
18
+ kDownto
19
+ kWhile
20
+ kRepeat
21
+ kUntil
22
+ kDo
23
+ kCase
24
+ kOf
25
+ kWith
26
+ kFunction
27
+ kProcedure
28
+ kProgram
29
+ kUnit
30
+ kInterface
31
+ kImplementation
32
+ kVar
33
+ kConst
34
+ kType
35
+ kArray
36
+ kRecord
37
+ kSet
38
+ kFile
39
+ kClass
40
+ kObject
41
+ kConstructor
42
+ kDestructor
43
+ kProperty
44
+ kInherited
45
+ kPrivate
46
+ kProtected
47
+ kPublic
48
+ kPublished
49
+ kVirtual
50
+ kOverride
51
+ kAbstract
52
+ kStatic
53
+ kForward
54
+ kExternal
55
+ kUses
56
+ kIn
57
+ kNil
58
+ kNot
59
+ kAnd
60
+ kOr
61
+ kXor
62
+ kDiv
63
+ kMod
64
+ kShl
65
+ kShr
66
+ kAs
67
+ kIs
68
+ kTry
69
+ kExcept
70
+ kFinally
71
+ kRaise
72
+ kOn
73
+ kGoto
74
+ kLabel
75
+ kExit
76
+ kBreak
77
+ kContinue
78
+ ],
79
+ number: %i[
80
+ integer
81
+ real
82
+ hex
83
+ ],
84
+ constant: %i[],
85
+ function_name: %i[],
86
+ variable: %i[identifier],
87
+ type: %i[type_identifier],
88
+ operator: %i[],
89
+ punctuation: %i[],
90
+ builtin: %i[
91
+ kTrue
92
+ kFalse
93
+ ],
94
+ property: %i[]
95
+ }.freeze
96
+
97
+ PASCAL = PASCAL_FEATURES.flat_map { |face, nodes|
98
+ nodes.map { |node| [node, face] }
99
+ }.to_h.freeze
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ PHP_FEATURES = {
7
+ comment: %i[comment],
8
+ string: %i[
9
+ string
10
+ encapsed_string
11
+ heredoc
12
+ nowdoc
13
+ shell_command_expression
14
+ ],
15
+ keyword: %i[
16
+ if
17
+ else
18
+ elseif
19
+ endif
20
+ for
21
+ foreach
22
+ endforeach
23
+ while
24
+ endwhile
25
+ do
26
+ switch
27
+ case
28
+ default
29
+ endswitch
30
+ break
31
+ continue
32
+ return
33
+ throw
34
+ try
35
+ catch
36
+ finally
37
+ function
38
+ fn
39
+ class
40
+ interface
41
+ trait
42
+ extends
43
+ implements
44
+ namespace
45
+ use
46
+ as
47
+ const
48
+ public
49
+ private
50
+ protected
51
+ static
52
+ final
53
+ abstract
54
+ readonly
55
+ new
56
+ clone
57
+ instanceof
58
+ insteadof
59
+ global
60
+ echo
61
+ print
62
+ include
63
+ include_once
64
+ require
65
+ require_once
66
+ goto
67
+ yield
68
+ match
69
+ enum
70
+ ],
71
+ number: %i[
72
+ integer
73
+ float
74
+ ],
75
+ constant: %i[],
76
+ function_name: %i[],
77
+ variable: %i[
78
+ variable_name
79
+ name
80
+ ],
81
+ type: %i[
82
+ primitive_type
83
+ named_type
84
+ ],
85
+ operator: %i[],
86
+ punctuation: %i[],
87
+ builtin: %i[
88
+ true
89
+ false
90
+ null
91
+ ],
92
+ property: %i[]
93
+ }.freeze
94
+
95
+ PHP = PHP_FEATURES.flat_map { |face, nodes|
96
+ nodes.map { |node| [node, face] }
97
+ }.to_h.freeze
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ PYTHON_FEATURES = {
7
+ comment: %i[comment],
8
+ string: %i[
9
+ string
10
+ string_content
11
+ concatenated_string
12
+ ],
13
+ keyword: %i[
14
+ if
15
+ elif
16
+ else
17
+ for
18
+ while
19
+ break
20
+ continue
21
+ return
22
+ pass
23
+ raise
24
+ try
25
+ except
26
+ finally
27
+ with
28
+ as
29
+ def
30
+ class
31
+ lambda
32
+ import
33
+ from
34
+ global
35
+ nonlocal
36
+ assert
37
+ yield
38
+ del
39
+ in
40
+ not
41
+ and
42
+ or
43
+ is
44
+ async
45
+ await
46
+ match
47
+ case
48
+ ],
49
+ number: %i[
50
+ integer
51
+ float
52
+ ],
53
+ constant: %i[],
54
+ function_name: %i[],
55
+ variable: %i[identifier],
56
+ type: %i[type],
57
+ operator: %i[],
58
+ punctuation: %i[],
59
+ builtin: %i[
60
+ true
61
+ false
62
+ none
63
+ ],
64
+ property: %i[attribute]
65
+ }.freeze
66
+
67
+ PYTHON = PYTHON_FEATURES.flat_map { |face, nodes|
68
+ nodes.map { |node| [node, face] }
69
+ }.to_h.freeze
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ # Feature-based ノードマッピング
7
+ # Emacs の treesit-font-lock-rules 風に feature ごとに分類
8
+ RUBY_FEATURES = {
9
+ comment: %i[comment],
10
+ string: %i[
11
+ string_content
12
+ heredoc_content
13
+ simple_symbol
14
+ escape_sequence
15
+ ],
16
+ keyword: %i[
17
+ def
18
+ end
19
+ class
20
+ module
21
+ if
22
+ else
23
+ elsif
24
+ unless
25
+ case
26
+ when
27
+ then
28
+ while
29
+ until
30
+ for
31
+ do
32
+ break
33
+ next
34
+ redo
35
+ retry
36
+ return
37
+ yield
38
+ begin
39
+ rescue
40
+ raise
41
+ ensure
42
+ and
43
+ or
44
+ not
45
+ in
46
+ alias
47
+ undef
48
+ defined?
49
+ self
50
+ super
51
+ __FILE__
52
+ __LINE__
53
+ __ENCODING__
54
+ ],
55
+ number: %i[integer float complex rational],
56
+ constant: %i[constant],
57
+ function_name: %i[method_name],
58
+ variable: %i[
59
+ identifier
60
+ instance_variable
61
+ class_variable
62
+ global_variable
63
+ ],
64
+ type: %i[],
65
+ operator: %i[
66
+ binary
67
+ unary
68
+ assignment
69
+ operator
70
+ ],
71
+ punctuation: %i[],
72
+ builtin: %i[nil true false],
73
+ property: %i[]
74
+ }.freeze
75
+
76
+ # Feature → Face の展開
77
+ RUBY = RUBY_FEATURES.flat_map { |face, nodes|
78
+ nodes.map { |node| [node, face] }
79
+ }.to_h.freeze
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ RUST_FEATURES = {
7
+ comment: %i[
8
+ line_comment
9
+ block_comment
10
+ ],
11
+ string: %i[
12
+ string_literal
13
+ char_literal
14
+ raw_string_literal
15
+ ],
16
+ keyword: %i[
17
+ if
18
+ else
19
+ for
20
+ while
21
+ loop
22
+ break
23
+ continue
24
+ return
25
+ fn
26
+ let
27
+ mut
28
+ const
29
+ static
30
+ struct
31
+ enum
32
+ union
33
+ impl
34
+ trait
35
+ type
36
+ mod
37
+ use
38
+ pub
39
+ crate
40
+ self
41
+ super
42
+ as
43
+ in
44
+ ref
45
+ move
46
+ dyn
47
+ async
48
+ await
49
+ match
50
+ where
51
+ unsafe
52
+ extern
53
+ default
54
+ ],
55
+ number: %i[
56
+ integer_literal
57
+ float_literal
58
+ ],
59
+ constant: %i[],
60
+ function_name: %i[],
61
+ variable: %i[identifier],
62
+ type: %i[
63
+ type_identifier
64
+ primitive_type
65
+ generic_type
66
+ ],
67
+ operator: %i[],
68
+ punctuation: %i[],
69
+ builtin: %i[
70
+ true
71
+ false
72
+ ],
73
+ property: %i[field_identifier]
74
+ }.freeze
75
+
76
+ RUST = RUST_FEATURES.flat_map { |face, nodes|
77
+ nodes.map { |node| [node, face] }
78
+ }.to_h.freeze
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ module NodeMaps
6
+ # YAML_LANG - Ruby の YAML モジュールと名前衝突を避けるため
7
+ YAML_FEATURES = {
8
+ comment: %i[comment],
9
+ string: %i[
10
+ string_scalar
11
+ double_quote_scalar
12
+ single_quote_scalar
13
+ block_scalar
14
+ ],
15
+ keyword: %i[
16
+ anchor
17
+ alias
18
+ tag
19
+ ],
20
+ number: %i[
21
+ integer_scalar
22
+ float_scalar
23
+ ],
24
+ constant: %i[],
25
+ function_name: %i[],
26
+ variable: %i[],
27
+ type: %i[],
28
+ operator: %i[],
29
+ punctuation: %i[],
30
+ builtin: %i[
31
+ boolean_scalar
32
+ null_scalar
33
+ ],
34
+ property: %i[
35
+ block_mapping_pair
36
+ flow_pair
37
+ ]
38
+ }.freeze
39
+
40
+ YAML_LANG = YAML_FEATURES.flat_map { |face, nodes|
41
+ nodes.map { |node| [node, face] }
42
+ }.to_h.freeze
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "node_maps/ruby"
4
+ require_relative "node_maps/hcl"
5
+ require_relative "node_maps/bash"
6
+ require_relative "node_maps/c"
7
+ require_relative "node_maps/csharp"
8
+ require_relative "node_maps/cobol"
9
+ require_relative "node_maps/groovy"
10
+ require_relative "node_maps/haml"
11
+ require_relative "node_maps/html"
12
+ require_relative "node_maps/java"
13
+ require_relative "node_maps/javascript"
14
+ require_relative "node_maps/json"
15
+ require_relative "node_maps/pascal"
16
+ require_relative "node_maps/php"
17
+ require_relative "node_maps/python"
18
+ require_relative "node_maps/rust"
19
+ require_relative "node_maps/yaml"
20
+
21
+ module Textbringer
22
+ module TreeSitter
23
+ module NodeMaps
24
+ class << self
25
+ def for(language)
26
+ # カスタムマップが登録されていれば、デフォルトとマージして返す
27
+ if @custom_maps&.key?(language)
28
+ default_map = default_maps[language]
29
+ if default_map
30
+ default_map.merge(@custom_maps[language])
31
+ else
32
+ @custom_maps[language]
33
+ end
34
+ else
35
+ default_maps[language]
36
+ end
37
+ end
38
+
39
+ def register(language, node_map)
40
+ @custom_maps ||= {}
41
+ @custom_maps[language] = node_map
42
+ end
43
+
44
+ def clear_custom_maps
45
+ @custom_maps = {}
46
+ end
47
+
48
+ def available_languages
49
+ (default_maps.keys + (@custom_maps&.keys || [])).uniq
50
+ end
51
+
52
+ private
53
+
54
+ def default_maps
55
+ {
56
+ ruby: RUBY,
57
+ hcl: HCL,
58
+ bash: BASH,
59
+ c: C,
60
+ csharp: CSHARP,
61
+ cobol: COBOL,
62
+ groovy: GROOVY,
63
+ haml: HAML,
64
+ html: HTML,
65
+ java: JAVA,
66
+ javascript: JAVASCRIPT,
67
+ json: JSON_LANG,
68
+ pascal: PASCAL,
69
+ php: PHP,
70
+ python: PYTHON,
71
+ rust: RUST,
72
+ yaml: YAML_LANG
73
+ }
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Textbringer
4
+ module TreeSitter
5
+ VERSION = "1.0.0"
6
+ end
7
+ end