Skip to content

Commit b7f153b

Browse files
authored
Merge pull request #1 from matrach/language-features
Per language feature flags & some warns
2 parents e0492f2 + f0ce804 commit b7f153b

File tree

5 files changed

+50
-13
lines changed

5 files changed

+50
-13
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/Cargo.toml

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,48 @@ edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

8+
[features]
9+
default = ["all_langs"]
10+
11+
cpp = ["dep:clang"]
12+
javascript = ["dep:boa_parser", "dep:boa_interner"]
13+
lua = ["dep:full_moon"]
14+
python = ["dep:rustpython-parser"]
15+
rust = ["dep:proc-macro2"]
16+
sql = ["dep:sqlparser"]
17+
verilog = ["dep:verilog-lang"]
18+
19+
all_langs = ["cpp", "javascript", "lua", "python", "rust", "sql", "verilog"]
20+
21+
822
[dependencies]
923

1024
anyhow = "1.0.75"
25+
once_cell = "1.20.2"
1126
bitvec = "1.0.1"
12-
clang = "2.0.0"
1327
regex = "1.10.0"
1428
rkr-gst = "0.1.2"
1529
tempfile = "3.8.0"
1630
walkdir = "2.4.0"
1731
serde = { version = "1.0.189", features = ["derive"] }
18-
rustpython-parser = { version = "0.3.0", features = ["full-lexer"] }
19-
proc-macro2 = { version = "1.0.69", features = ["span-locations"] }
20-
verilog-lang = { git = "https://github.com/jiegec/verilog-lang" }
2132
env_logger = "0.10.0"
2233
log = "0.4.20"
2334
adler32 = "1.2.0"
2435
html-escape = "0.2.13"
2536
clap = { version = "4.4.6", features = ["derive"] }
26-
sqlparser = "0.38.0"
27-
boa_parser = "0.17.3"
28-
boa_interner = "0.17.3"
29-
boa_ast = "0.17.3"
30-
full_moon = "0.18.1"
31-
once_cell = "1.20.2"
37+
38+
# Cpp
39+
clang = { version = "2.0.0", optional = true }
40+
# JavaScript
41+
boa_parser = { version = "0.17.3", optional = true }
42+
boa_interner = { version = "0.17.3", optional = true }
43+
# Lua
44+
full_moon = { version = "0.18.1", optional = true }
45+
# Python
46+
rustpython-parser = { version = "0.3.0", features = ["full-lexer"], optional = true }
47+
# Rust
48+
proc-macro2 = { version = "1.0.69", features = ["span-locations"], optional = true }
49+
# SQL
50+
sqlparser = { version = "0.38.0", optional = true }
51+
# Verilog
52+
verilog-lang = { git = "https://github.com/jiegec/verilog-lang", optional = true }

core/src/bin/find_pairs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ fn main() -> anyhow::Result<()> {
9797
let keys: Vec<&PathBuf> = all_tokens[submission].keys().collect();
9898

9999
if !template_tokens.contains_key(submission) {
100+
warn!("No template found for {}!", submission.display());
100101
continue;
101102
}
102103

core/src/lang/mod.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,36 +31,43 @@ struct LangInfo {
3131

3232
fn get_lang_info() -> Vec<LangInfo> {
3333
vec![
34+
#[cfg(feature = "cpp")]
3435
LangInfo {
3536
name: Language::Cpp,
3637
extensions: vec!["cpp", "cc", "cxx", "c++", "c", "cu"],
3738
tokenizer: Box::new(tokenizer::cpp::Cpp),
3839
},
40+
#[cfg(feature = "rust")]
3941
LangInfo {
4042
name: Language::Rust,
4143
extensions: vec!["rs"],
4244
tokenizer: Box::new(tokenizer::rust::Rust),
4345
},
46+
#[cfg(feature = "verilog")]
4447
LangInfo {
4548
name: Language::Verilog,
4649
extensions: vec!["v"],
4750
tokenizer: Box::new(tokenizer::verilog::Verilog),
4851
},
52+
#[cfg(feature = "python")]
4953
LangInfo {
5054
name: Language::Python,
5155
extensions: vec!["py"],
5256
tokenizer: Box::new(tokenizer::python::Python),
5357
},
58+
#[cfg(feature = "sql")]
5459
LangInfo {
5560
name: Language::SQL,
5661
extensions: vec!["sql"],
5762
tokenizer: Box::new(tokenizer::sql::SQL),
5863
},
64+
#[cfg(feature = "javascript")]
5965
LangInfo {
6066
name: Language::JavaScript,
6167
extensions: vec!["js"],
6268
tokenizer: Box::new(tokenizer::javascript::JavaScript),
6369
},
70+
#[cfg(feature = "lua")]
6471
LangInfo {
6572
name: Language::Lua,
6673
extensions: vec!["lua"],
@@ -81,7 +88,8 @@ pub fn tokenize(path: &Path) -> anyhow::Result<Vec<Token>> {
8188
return lang.tokenizer.tokenize(path);
8289
}
8390
}
84-
Err(anyhow!("Unsupported file extension: {:?}", path))
91+
Err(anyhow!("Unsupported file extension: {:?}. \
92+
Did you enable a corresponding feature?", path))
8593
}
8694

8795
pub fn tokenize_str(content: &str, language: Language) -> anyhow::Result<Vec<Token>> {
@@ -90,5 +98,6 @@ pub fn tokenize_str(content: &str, language: Language) -> anyhow::Result<Vec<Tok
9098
return lang.tokenizer.tokenize_str(content);
9199
}
92100
}
93-
Err(anyhow!("Unsupported language: {:?}", language))
101+
Err(anyhow!("Unsupported language: {:?}. \
102+
Did you enable a corresponding feature?", language))
94103
}

core/src/lang/tokenizer/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
#[cfg(feature="cpp")]
12
pub mod cpp;
3+
#[cfg(feature="javascript")]
24
pub mod javascript;
5+
#[cfg(feature="lua")]
36
pub mod lua;
7+
#[cfg(feature="python")]
48
pub mod python;
9+
#[cfg(feature="rust")]
510
pub mod rust;
11+
#[cfg(feature="sql")]
612
pub mod sql;
13+
#[cfg(feature="verilog")]
714
pub mod verilog;

0 commit comments

Comments
 (0)