Skip to content

Commit 6ecdedb

Browse files
committed
Support code tags XXX: and XXX(user):
1 parent 961e0f2 commit 6ecdedb

19 files changed

+752
-68
lines changed

Makefile

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
build:
2+
tree-sitter generate
3+
4+
test: build
5+
tree-sitter test
6+
7+
serve: build
8+
tree-sitter build-wasm
9+
tree-sitter web-ui
10+
11+
release: build format
12+
tree-sitter build-wasm
13+
14+
format:
15+
clang-format -i \
16+
--style="{BasedOnStyle: webkit, IndentWidth: 2}" \
17+
src/scanner.c \
18+
src/tree_sitter_comment/*
19+
20+
.PHONY: build test serve release format

binding.gyp

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
{
22
"targets": [
33
{
4-
"target_name": "tree_sitter_codetags_binding",
4+
"target_name": "tree_sitter_comment_binding",
55
"include_dirs": [
66
"<!(node -e \"require('nan')\")",
77
"src"
88
],
99
"sources": [
1010
"src/parser.c",
11-
"src/binding.cc"
11+
"src/binding.cc",
12+
"src/scanner.c"
1213
],
1314
"cflags_c": [
1415
"-std=c99",

compile_flags.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-Isrc/
2+
-std=c99

grammar.js

+36-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
1+
const WHITE_SPACE = choice(' ', '\t', '\v', '\f');
2+
const NEWLINE = /\r?\n/;
3+
14
module.exports = grammar({
2-
name: 'codetags',
5+
name: 'comment',
6+
7+
externals: $ => [
8+
$.name,
9+
$._text,
10+
],
11+
12+
extras: $ => [
13+
$.__newline,
14+
$.__whitespace,
15+
],
316

417
rules: {
5-
source: $ => 'TODO'
6-
}
18+
source: $ => repeat(
19+
choice(
20+
$.tag,
21+
$._text,
22+
),
23+
),
24+
25+
tag: $ => seq(
26+
$.name,
27+
optional($._user),
28+
':',
29+
),
30+
31+
_user: $ => seq(
32+
'(',
33+
alias(/[^()]+/, $.user),
34+
')',
35+
),
36+
37+
__newline: $ => NEWLINE,
38+
__whitespace: $ => token(WHITE_SPACE),
39+
},
740
});

index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
try {
2-
module.exports = require("./build/Release/tree_sitter_codetags_binding");
2+
module.exports = require("./build/Release/tree_sitter_comment_binding");
33
} catch (error) {
44
try {
5-
module.exports = require("./build/Debug/tree_sitter_codetags_binding");
5+
module.exports = require("./build/Debug/tree_sitter_comment_binding");
66
} catch (_) {
77
throw error
88
}

package-lock.json

+9-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"name": "tree-sitter-codetags",
2+
"name": "tree-sitter-comment",
33
"version": "0.0.1",
4-
"description": "Grammar for code tags like TODO:, FiXME(stsewd):, etc.",
4+
"description": "Grammar for code tags like TODO:, FIXME(user):, etc.",
55
"main": "index.js",
66
"scripts": {
77
"test": "tree-sitter test",

src/binding.cc

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
using namespace v8;
66

7-
extern "C" TSLanguage * tree_sitter_code_tags();
7+
extern "C" TSLanguage * tree_sitter_comment();
88

99
namespace {
1010

@@ -17,12 +17,12 @@ void Init(Local<Object> exports, Local<Object> module) {
1717

1818
Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked();
1919
Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked();
20-
Nan::SetInternalFieldPointer(instance, 0, tree_sitter_code_tags());
20+
Nan::SetInternalFieldPointer(instance, 0, tree_sitter_comment());
2121

22-
Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("code_tags").ToLocalChecked());
22+
Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("comment").ToLocalChecked());
2323
Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance);
2424
}
2525

26-
NODE_MODULE(tree_sitter_code_tags_binding, Init)
26+
NODE_MODULE(tree_sitter_comment_binding, Init)
2727

2828
} // namespace

src/grammar.json

+106-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,119 @@
11
{
2-
"name": "codetags",
2+
"name": "comment",
33
"rules": {
44
"source": {
5-
"type": "STRING",
6-
"value": "hello"
5+
"type": "REPEAT",
6+
"content": {
7+
"type": "CHOICE",
8+
"members": [
9+
{
10+
"type": "SYMBOL",
11+
"name": "tag"
12+
},
13+
{
14+
"type": "SYMBOL",
15+
"name": "_text"
16+
}
17+
]
18+
}
19+
},
20+
"tag": {
21+
"type": "SEQ",
22+
"members": [
23+
{
24+
"type": "SYMBOL",
25+
"name": "name"
26+
},
27+
{
28+
"type": "CHOICE",
29+
"members": [
30+
{
31+
"type": "SYMBOL",
32+
"name": "_user"
33+
},
34+
{
35+
"type": "BLANK"
36+
}
37+
]
38+
},
39+
{
40+
"type": "STRING",
41+
"value": ":"
42+
}
43+
]
44+
},
45+
"_user": {
46+
"type": "SEQ",
47+
"members": [
48+
{
49+
"type": "STRING",
50+
"value": "("
51+
},
52+
{
53+
"type": "ALIAS",
54+
"content": {
55+
"type": "PATTERN",
56+
"value": "[^()]+"
57+
},
58+
"named": true,
59+
"value": "user"
60+
},
61+
{
62+
"type": "STRING",
63+
"value": ")"
64+
}
65+
]
66+
},
67+
"__newline": {
68+
"type": "PATTERN",
69+
"value": "\\r?\\n"
70+
},
71+
"__whitespace": {
72+
"type": "TOKEN",
73+
"content": {
74+
"type": "CHOICE",
75+
"members": [
76+
{
77+
"type": "STRING",
78+
"value": " "
79+
},
80+
{
81+
"type": "STRING",
82+
"value": "\t"
83+
},
84+
{
85+
"type": "STRING",
86+
"value": "\u000b"
87+
},
88+
{
89+
"type": "STRING",
90+
"value": "\f"
91+
}
92+
]
93+
}
794
}
895
},
996
"extras": [
1097
{
11-
"type": "PATTERN",
12-
"value": "\\s"
98+
"type": "SYMBOL",
99+
"name": "__newline"
100+
},
101+
{
102+
"type": "SYMBOL",
103+
"name": "__whitespace"
13104
}
14105
],
15106
"conflicts": [],
16-
"externals": [],
107+
"externals": [
108+
{
109+
"type": "SYMBOL",
110+
"name": "name"
111+
},
112+
{
113+
"type": "SYMBOL",
114+
"name": "_text"
115+
}
116+
],
17117
"inline": [],
18118
"supertypes": []
19119
}

src/node-types.json

+47-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,55 @@
22
{
33
"type": "source",
44
"named": true,
5-
"fields": {}
5+
"fields": {},
6+
"children": {
7+
"multiple": true,
8+
"required": false,
9+
"types": [
10+
{
11+
"type": "tag",
12+
"named": true
13+
}
14+
]
15+
}
616
},
717
{
8-
"type": "hello",
18+
"type": "tag",
19+
"named": true,
20+
"fields": {},
21+
"children": {
22+
"multiple": true,
23+
"required": true,
24+
"types": [
25+
{
26+
"type": "name",
27+
"named": true
28+
},
29+
{
30+
"type": "user",
31+
"named": true
32+
}
33+
]
34+
}
35+
},
36+
{
37+
"type": "(",
938
"named": false
39+
},
40+
{
41+
"type": ")",
42+
"named": false
43+
},
44+
{
45+
"type": ":",
46+
"named": false
47+
},
48+
{
49+
"type": "name",
50+
"named": true
51+
},
52+
{
53+
"type": "user",
54+
"named": true
1055
}
1156
]

0 commit comments

Comments
 (0)