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.
- checksums.yaml +7 -0
- data/CLAUDE.md +76 -0
- data/LICENSE.txt +13 -0
- data/README.md +125 -0
- data/Rakefile +12 -0
- data/exe/textbringer-tree-sitter +513 -0
- data/ext/textbringer_tree_sitter/extconf.rb +125 -0
- data/lib/textbringer/tree_sitter/node_maps/bash.rb +57 -0
- data/lib/textbringer/tree_sitter/node_maps/c.rb +64 -0
- data/lib/textbringer/tree_sitter/node_maps/cobol.rb +94 -0
- data/lib/textbringer/tree_sitter/node_maps/csharp.rb +107 -0
- data/lib/textbringer/tree_sitter/node_maps/groovy.rb +77 -0
- data/lib/textbringer/tree_sitter/node_maps/haml.rb +34 -0
- data/lib/textbringer/tree_sitter/node_maps/hcl.rb +53 -0
- data/lib/textbringer/tree_sitter/node_maps/html.rb +33 -0
- data/lib/textbringer/tree_sitter/node_maps/java.rb +98 -0
- data/lib/textbringer/tree_sitter/node_maps/javascript.rb +82 -0
- data/lib/textbringer/tree_sitter/node_maps/json.rb +31 -0
- data/lib/textbringer/tree_sitter/node_maps/pascal.rb +102 -0
- data/lib/textbringer/tree_sitter/node_maps/php.rb +100 -0
- data/lib/textbringer/tree_sitter/node_maps/python.rb +72 -0
- data/lib/textbringer/tree_sitter/node_maps/ruby.rb +82 -0
- data/lib/textbringer/tree_sitter/node_maps/rust.rb +81 -0
- data/lib/textbringer/tree_sitter/node_maps/yaml.rb +45 -0
- data/lib/textbringer/tree_sitter/node_maps.rb +78 -0
- data/lib/textbringer/tree_sitter/version.rb +7 -0
- data/lib/textbringer/tree_sitter_adapter.rb +166 -0
- data/lib/textbringer/tree_sitter_config.rb +91 -0
- data/lib/textbringer_plugin.rb +141 -0
- data/parsers/darwin-arm64/.gitkeep +0 -0
- data/parsers/darwin-x64/.gitkeep +0 -0
- data/parsers/linux-arm64/.gitkeep +0 -0
- data/parsers/linux-x64/.gitkeep +0 -0
- data/scripts/build_parsers.sh +77 -0
- data/scripts/test_parser.rb +223 -0
- 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