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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3db9faa01f7e0e122ecf363a3817feca949f4e1792efbc4b45287d61f78da2d3
4
+ data.tar.gz: 8c3a66c4f5471534404f1c9832681cc98921b3ddb9e5ef40cdfb53a8192fb943
5
+ SHA512:
6
+ metadata.gz: 8457d2c8b25b8061fe3771a58a5e40e53d2aec3cdae3c16b95646684bdd0000596da53d337d802f52fd4116c5059f732b2fbeec398fc901de2d95b4a981612b1
7
+ data.tar.gz: 8f5a6c6f52ce92bda387f6d52978485c10a89a339692d0a4d8db57f5e72574046d9ff0e22ca0205b59570150cad46ccce71e71285e26054cb5837858aaec4949
data/CLAUDE.md ADDED
@@ -0,0 +1,76 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## プロジェクト概要
6
+
7
+ Textbringer(Ruby製ターミナルエディタ)に Tree-sitter ベースのシンタックスハイライトを提供するプラグイン gem。textbringer-rouge の代替として、より正確な構文解析を実現する(特に Terraform/HCL で Rouge の lexer に問題があるため)。
8
+
9
+ ## 開発コマンド
10
+
11
+ ```bash
12
+ bundle install
13
+ bundle exec rake test
14
+ bundle exec ruby -Ilib:test test/test_*.rb # 単一テスト
15
+ bundle exec rake build
16
+ bundle exec rubocop
17
+ ```
18
+
19
+ ## アーキテクチャ
20
+
21
+ ### 構造
22
+
23
+ ```
24
+ lib/
25
+ ├── textbringer/
26
+ │ ├── tree_sitter_adapter.rb # Window モンキーパッチ + アダプター
27
+ │ ├── tree_sitter_config.rb # Parser ロード、フェイス定義
28
+ │ └── tree_sitter/
29
+ │ ├── version.rb
30
+ │ └── node_maps/ # 言語ごとのノードマッピング
31
+ │ ├── ruby.rb
32
+ │ └── hcl.rb
33
+ └── textbringer_plugin.rb # エントリポイント
34
+ parsers/ # プリビルド parser (.dylib/.so)
35
+ ├── darwin-arm64/
36
+ └── linux-x64/
37
+ ```
38
+
39
+ ### 主要コンポーネント
40
+
41
+ - **TreeSitterAdapter**: Window クラスをモンキーパッチして `custom_highlight` を実装
42
+ - **TreeSitterConfig**: プラットフォーム判定と parser ロード
43
+ - **NodeMaps**: 言語固有のノードタイプ → Face マッピング
44
+
45
+ ### 依存関係
46
+
47
+ - `ruby_tree_sitter` (~> 2.0) - Faveod/ruby-tree-sitter
48
+ - `textbringer` (>= 1.0)
49
+
50
+ ## Tree-sitter Parser
51
+
52
+ ### LANGUAGE_VERSION 互換性
53
+
54
+ ruby_tree_sitter 2.0.0 は LANGUAGE_VERSION 6-14 をサポート。parser ビルド時は互換性を確認:
55
+
56
+ ```bash
57
+ grep LANGUAGE_VERSION src/parser.c | head -1
58
+ ```
59
+
60
+ ### HCL Parser のビルド
61
+
62
+ mitchellh/tree-sitter-hcl を使用(LANGUAGE_VERSION 13):
63
+
64
+ ```bash
65
+ git clone https://github.com/mitchellh/tree-sitter-hcl.git
66
+ cd tree-sitter-hcl
67
+ c++ -shared -fPIC -O2 -std=c++14 -Isrc src/parser.c src/scanner.cc -o libtree-sitter-hcl.dylib
68
+ ```
69
+
70
+ ### プリビルド parser の取得
71
+
72
+ Faveod/tree-sitter-parsers から取得可能:bash, c, javascript, json, python, ruby, rust 等
73
+
74
+ ## 参考実装
75
+
76
+ - [textbringer-rouge](https://github.com/yancya/textbringer-rouge) - Window モンキーパッチの実装パターン
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # textbringer-tree-sitter
2
+
3
+ Tree-sitter による Textbringer のシンタックスハイライトプラグイン。
4
+
5
+ ## 特徴
6
+
7
+ - Tree-sitter による正確な構文解析
8
+ - Rouge で認識されない Terraform/HCL の `for`, `in`, 関数呼び出しを正しくハイライト
9
+ - Emacs 風の feature-based レベル制御
10
+ - カスタマイズ可能なノードマッピング
11
+
12
+ ## インストール
13
+
14
+ ```ruby
15
+ gem 'textbringer-tree-sitter'
16
+ ```
17
+
18
+ gem install 時に以下の parser が自動でダウンロードされます:
19
+ - Ruby, Python, JavaScript, JSON, Bash
20
+
21
+ ### 追加 Parser のインストール
22
+
23
+ ```bash
24
+ # 利用可能な parser を確認
25
+ textbringer-tree-sitter list
26
+
27
+ # HCL (Terraform) parser をビルド&インストール
28
+ textbringer-tree-sitter get hcl
29
+
30
+ # YAML parser をビルド&インストール
31
+ textbringer-tree-sitter get yaml
32
+
33
+ # Go parser をビルド&インストール
34
+ textbringer-tree-sitter get go
35
+
36
+ # プリビルド済み parser をすべてインストール
37
+ textbringer-tree-sitter get-all
38
+ ```
39
+
40
+ ### Parser の配置場所
41
+
42
+ Parser は `~/.textbringer/parsers/{platform}/` に配置されます。
43
+
44
+ ```bash
45
+ # 配置先を確認
46
+ textbringer-tree-sitter path
47
+ ```
48
+
49
+ ## 使い方
50
+
51
+ Mode で `use_tree_sitter` を呼ぶだけ:
52
+
53
+ ```ruby
54
+ class RubyMode < ProgrammingMode
55
+ extend Textbringer::TreeSitterAdapter::ClassMethods
56
+ use_tree_sitter :ruby
57
+ end
58
+ ```
59
+
60
+ ## カスタマイズ
61
+
62
+ ### ハイライトレベル (Emacs 風)
63
+
64
+ ```ruby
65
+ # ~/.textbringer.rb
66
+
67
+ # Level 1: comment, string のみ
68
+ # Level 2: + keyword, type, constant
69
+ # Level 3: + function_name, variable, number (デフォルト)
70
+ # Level 4: + operator, punctuation, builtin
71
+
72
+ CONFIG[:tree_sitter_highlight_level] = 4
73
+ ```
74
+
75
+ ### 個別 Feature 指定
76
+
77
+ ```ruby
78
+ CONFIG[:tree_sitter_enabled_features] = [:comment, :string, :keyword]
79
+ ```
80
+
81
+ ### カスタムノードマッピング
82
+
83
+ ```ruby
84
+ Textbringer::TreeSitter::NodeMaps.register(:ruby, {
85
+ my_custom_node: :keyword
86
+ })
87
+ ```
88
+
89
+ ### カスタム Parser パス
90
+
91
+ ```ruby
92
+ CONFIG[:tree_sitter_parser_dir] = "/path/to/your/parsers"
93
+ ```
94
+
95
+ ## サポート言語
96
+
97
+ ### 自動インストール(プリビルド)
98
+
99
+ | 言語 | 状態 |
100
+ |------|------|
101
+ | Ruby | ✓ 自動 |
102
+ | Python | ✓ 自動 |
103
+ | JavaScript | ✓ 自動 |
104
+ | JSON | ✓ 自動 |
105
+ | Bash | ✓ 自動 |
106
+ | C | `get c` |
107
+ | Java | `get java` |
108
+ | Rust | `get rust` |
109
+ | HTML | `get html` |
110
+ | PHP | `get php` |
111
+
112
+ ### 要ビルド(コマンドで取得)
113
+
114
+ | 言語 | コマンド |
115
+ |------|----------|
116
+ | HCL (Terraform) | `textbringer-tree-sitter get hcl` |
117
+ | YAML | `textbringer-tree-sitter get yaml` |
118
+ | Go | `textbringer-tree-sitter get go` |
119
+ | TypeScript | `textbringer-tree-sitter get typescript` |
120
+ | C# | `textbringer-tree-sitter get csharp` |
121
+ | Groovy | `textbringer-tree-sitter get groovy` |
122
+
123
+ ## ライセンス
124
+
125
+ WTFPL
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/test_*.rb"]
10
+ end
11
+
12
+ task default: :test