Skip to content

Commit ea20ab2

Browse files
committed
Add Dart support
1 parent 548decb commit ea20ab2

6 files changed

Lines changed: 48 additions & 1 deletion

File tree

crates/cli/src/file_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use kernel::model::violation::Violation;
1717

1818
static FILE_EXTENSIONS_PER_LANGUAGE_LIST: &[(Language, &[&str])] = &[
1919
(Language::Csharp, &["cs"]),
20+
(Language::Dart, &["dart"]),
2021
(Language::Dockerfile, &["docker", "dockerfile"]),
2122
(Language::Elixir, &["ex", "exs"]),
2223
(Language::Go, &["go"]),

crates/static-analysis-kernel/build.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ fn main() {
254254
files: vec!["parser.c".to_string(), "scanner.c".to_string()],
255255
cpp: false,
256256
},
257+
TreeSitterProject {
258+
name: "tree-sitter-dart".to_string(),
259+
compilation_unit: "tree-sitter-dart".to_string(),
260+
// Fork of https://github.com/UserNobody14/tree-sitter-dart
261+
repository: "https://github.com/muh-nee/tree-sitter-dart".to_string(),
262+
build_dir: "src".into(),
263+
// ABI 14 version of upstream 0fc19c3a57b1109802af41d2b8f60d8835c5da3a
264+
commit_hash: "dfad3d21e451c9406bee9c44e4ffcd6d7fb44bb7".to_string(),
265+
files: vec!["parser.c".to_string(), "scanner.c".to_string()],
266+
cpp: false,
267+
},
257268
];
258269

259270
// For each project:

crates/static-analysis-kernel/src/analysis/analyze.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ fn get_lines_to_ignore(code: &str, language: &Language) -> LinesToIgnore {
4545
Language::JavaScript | Language::TypeScript | Language::Kotlin | Language::Apex => {
4646
vec!["//", "/*"]
4747
}
48-
Language::Go | Language::Rust | Language::Csharp | Language::Java | Language::Swift => {
48+
Language::Go
49+
| Language::Rust
50+
| Language::Csharp
51+
| Language::Dart
52+
| Language::Java
53+
| Language::Swift => {
4954
vec!["//"]
5055
}
5156
Language::Json => {

crates/static-analysis-kernel/src/analysis/generated_content.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ pub fn is_generated_file(full_content: &str, language: &Language) -> bool {
4848
Language::Csharp => {
4949
content.contains("<autogenerated") | content.contains("<auto-generated")
5050
}
51+
Language::Dart => content.contains("GENERATED CODE - DO NOT MODIFY"),
5152
_ => false,
5253
}
5354
}
@@ -152,6 +153,18 @@ mod tests {
152153
));
153154
}
154155

156+
#[test]
157+
fn test_is_generated_file_dart() {
158+
assert!(is_generated_file(
159+
"// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'foo.dart';\n",
160+
&Language::Dart
161+
));
162+
assert!(!is_generated_file(
163+
"void main() {\n print('hello');\n}\n",
164+
&Language::Dart
165+
));
166+
}
167+
155168
#[test]
156169
fn test_is_generated_file_ruby() {
157170
assert!(is_generated_file(

crates/static-analysis-kernel/src/analysis/tree_sitter.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use tree_sitter::CaptureQuantifier;
1111
pub fn get_tree_sitter_language(language: &Language) -> tree_sitter::Language {
1212
extern "C" {
1313
fn tree_sitter_c_sharp() -> tree_sitter::Language;
14+
fn tree_sitter_dart() -> tree_sitter::Language;
1415
fn tree_sitter_dockerfile() -> tree_sitter::Language;
1516
fn tree_sitter_elixir() -> tree_sitter::Language;
1617
fn tree_sitter_go() -> tree_sitter::Language;
@@ -36,6 +37,7 @@ pub fn get_tree_sitter_language(language: &Language) -> tree_sitter::Language {
3637

3738
match language {
3839
Language::Csharp => unsafe { tree_sitter_c_sharp() },
40+
Language::Dart => unsafe { tree_sitter_dart() },
3941
Language::Dockerfile => unsafe { tree_sitter_dockerfile() },
4042
Language::Go => unsafe { tree_sitter_go() },
4143
Language::Elixir => unsafe { tree_sitter_elixir() },
@@ -498,6 +500,17 @@ function foo() {console.log("bar");}"#;
498500
assert_eq!("document", t.unwrap().root_node().kind());
499501
}
500502

503+
#[test]
504+
fn test_dart_get_tree() {
505+
let source_code = r#"void main() {
506+
print('Hello, Dart!');
507+
}
508+
"#;
509+
let t = get_tree(source_code, &Language::Dart);
510+
assert!(t.is_some());
511+
assert_eq!("program", t.unwrap().root_node().kind());
512+
}
513+
501514
#[test]
502515
fn test_ruby_get_tree() {
503516
let source_code = r#"def greeting

crates/static-analysis-kernel/src/model/common.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ impl fmt::Display for OutputFormat {
2323
pub enum Language {
2424
#[serde(rename = "CSHARP")]
2525
Csharp,
26+
#[serde(rename = "DART")]
27+
Dart,
2628
#[serde(rename = "DOCKERFILE")]
2729
Dockerfile,
2830
#[serde(rename = "ELIXIR")]
@@ -67,6 +69,7 @@ pub enum Language {
6769
#[allow(dead_code)]
6870
pub static ALL_LANGUAGES: &[Language] = &[
6971
Language::Csharp,
72+
Language::Dart,
7073
Language::Dockerfile,
7174
Language::Go,
7275
Language::Java,
@@ -93,6 +96,7 @@ impl fmt::Display for Language {
9396
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9497
let s = match self {
9598
Self::Csharp => "c#",
99+
Self::Dart => "dart",
96100
Self::Dockerfile => "dockerfile",
97101
Self::Go => "go",
98102
Self::Elixir => "elixir",

0 commit comments

Comments
 (0)