Skip to content

Commit bde94ae

Browse files
committed
feat(init): add a class-name field to grammars
1 parent 6dbcfdf commit bde94ae

File tree

5 files changed

+25
-9
lines changed

5 files changed

+25
-9
lines changed

cli/loader/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ pub struct Grammar {
187187
pub first_line_regex: Option<String>,
188188
#[serde(skip_serializing_if = "Option::is_none")]
189189
pub content_regex: Option<String>,
190+
#[serde(skip_serializing_if = "Option::is_none")]
191+
pub class_name: Option<String>,
190192
}
191193

192194
#[derive(Serialize, Deserialize)]

cli/src/init.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const PARSER_NAME_PLACEHOLDER: &str = "PARSER_NAME";
2424
const CAMEL_PARSER_NAME_PLACEHOLDER: &str = "CAMEL_PARSER_NAME";
2525
const UPPER_PARSER_NAME_PLACEHOLDER: &str = "UPPER_PARSER_NAME";
2626
const LOWER_PARSER_NAME_PLACEHOLDER: &str = "LOWER_PARSER_NAME";
27+
const PARSER_CLASS_NAME_PLACEHOLDER: &str = "PARSER_CLASS_NAME";
2728

2829
const PARSER_DESCRIPTION_PLACEHOLDER: &str = "PARSER_DESCRIPTION";
2930
const PARSER_LICENSE_PLACEHOLDER: &str = "PARSER_LICENSE";
@@ -152,6 +153,7 @@ impl JsonConfigOpts {
152153
injection_regex: Some(format!("^{}$", self.name)),
153154
first_line_regex: None,
154155
content_regex: None,
156+
class_name: Some(format!("TreeSitter{}", self.name.to_upper_camel_case())),
155157
}],
156158
metadata: Metadata {
157159
version: self.version,
@@ -209,6 +211,7 @@ struct GenerateOpts<'a> {
209211
funding: Option<&'a str>,
210212
version: &'a Version,
211213
camel_parser_name: &'a str,
214+
class_name: &'a str,
212215
}
213216

214217
pub fn generate_grammar_files(
@@ -250,6 +253,10 @@ pub fn generate_grammar_files(
250253
.camelcase
251254
.clone()
252255
.unwrap_or_else(|| language_name.to_upper_camel_case());
256+
let class_name = tree_sitter_config.grammars[0]
257+
.class_name
258+
.clone()
259+
.unwrap_or_else(|| format!("TreeSitter{}", language_name.to_upper_camel_case()));
253260

254261
let generate_opts = GenerateOpts {
255262
author_name: authors
@@ -275,6 +282,7 @@ pub fn generate_grammar_files(
275282
.and_then(|l| l.funding.as_ref().map(|f| f.as_str())),
276283
version: &tree_sitter_config.metadata.version,
277284
camel_parser_name: &camel_name,
285+
class_name: &class_name,
278286
};
279287

280288
// Create package.json
@@ -708,7 +716,8 @@ fn generate_file(
708716
.replace(
709717
PARSER_VERSION_PLACEHOLDER,
710718
&generate_opts.version.to_string(),
711-
);
719+
)
720+
.replace(PARSER_CLASS_NAME_PLACEHOLDER, generate_opts.class_name);
712721

713722
if let Some(name) = generate_opts.author_name {
714723
replacement = replacement.replace(AUTHOR_NAME_PLACEHOLDER, name);

cli/src/templates/package.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ if FileManager.default.fileExists(atPath: "src/scanner.c") {
99
}
1010

1111
let package = Package(
12-
name: "TreeSitterCAMEL_PARSER_NAME",
12+
name: "PARSER_CLASS_NAME",
1313
products: [
14-
.library(name: "TreeSitterCAMEL_PARSER_NAME", targets: ["TreeSitterCAMEL_PARSER_NAME"]),
14+
.library(name: "PARSER_CLASS_NAME", targets: ["PARSER_CLASS_NAME"]),
1515
],
1616
dependencies: [
1717
.package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.8.0"),
1818
],
1919
targets: [
2020
.target(
21-
name: "TreeSitterCAMEL_PARSER_NAME",
21+
name: "PARSER_CLASS_NAME",
2222
dependencies: [],
2323
path: ".",
2424
sources: sources,
@@ -29,12 +29,12 @@ let package = Package(
2929
cSettings: [.headerSearchPath("src")]
3030
),
3131
.testTarget(
32-
name: "TreeSitterCAMEL_PARSER_NAMETests",
32+
name: "PARSER_CLASS_NAMETests",
3333
dependencies: [
3434
"SwiftTreeSitter",
35-
"TreeSitterCAMEL_PARSER_NAME",
35+
"PARSER_CLASS_NAME",
3636
],
37-
path: "bindings/swift/TreeSitterCAMEL_PARSER_NAMETests"
37+
path: "bindings/swift/PARSER_CLASS_NAMETests"
3838
)
3939
],
4040
cLanguageStandard: .c11

cli/src/templates/tests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import XCTest
22
import SwiftTreeSitter
3-
import TreeSitterCAMEL_PARSER_NAME
3+
import PARSER_CLASS_NAME
44

5-
final class TreeSitterCAMEL_PARSER_NAMETests: XCTestCase {
5+
final class PARSER_CLASS_NAMETests: XCTestCase {
66
func testCanLoadGrammar() throws {
77
let parser = Parser()
88
let language = Language(language: tree_sitter_LOWER_PARSER_NAME())

docs/src/assets/schemas/config.schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@
133133
"type": "string",
134134
"format": "regex",
135135
"description": "A regex pattern that will be tested against the contents of the file in order to break ties in cases where multiple grammars matched the file."
136+
},
137+
"class-name": {
138+
"type": "string",
139+
"pattern": "^TreeSitter\\w+$",
140+
"description": "The class name for the Swift, Java & Kotlin bindings"
136141
}
137142
},
138143
"additionalProperties": false,

0 commit comments

Comments
 (0)