-
Notifications
You must be signed in to change notification settings - Fork 289
Expand file tree
/
Copy pathlanguage_support.rs
More file actions
77 lines (68 loc) · 2.69 KB
/
language_support.rs
File metadata and controls
77 lines (68 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use std::path::Path;
use harper_comments::CommentParser;
use harper_core::linting::{LintGroup, Linter};
use harper_core::parsers::MarkdownOptions;
use harper_core::spell::FstDictionary;
use harper_core::{Dialect, Document};
/// Creates a unit test checking that the linting of a source file in
/// `language_support_sources` produces the expected number of lints.
macro_rules! create_test {
($filename:ident.$ext:ident, $correct_expected:expr) => {
paste::paste! {
#[test]
fn [<lints_$ext _ $filename _correctly>](){
let filename = concat!(stringify!($filename), ".", stringify!($ext));
let source = include_str!(
concat!(
"./language_support_sources/",
concat!(
stringify!($filename), ".", stringify!($ext))
)
);
let parser = CommentParser::new_from_filename(Path::new(filename), MarkdownOptions::default()).unwrap();
let dict = FstDictionary::curated();
let document = Document::new(&source, &parser, &dict);
let mut linter = LintGroup::new_curated(dict, Dialect::American);
let lints = linter.lint(&document);
dbg!(&lints);
assert_eq!(lints.len(), $correct_expected);
// Make sure that all generated tokens span real characters
for token in document.tokens(){
assert!(token.span.try_get_content(document.get_source()).is_some());
}
}
}
};
}
create_test!(multiline_comments.cpp, 4);
create_test!(multiline_comments.ts, 4);
create_test!(multiline_comments.sol, 4);
create_test!(clean.lua, 0);
create_test!(dirty.lua, 1);
create_test!(clean.rs, 0);
create_test!(clean.sol, 0);
create_test!(jsdoc.ts, 4);
create_test!(issue_96.lua, 0);
create_test!(merged_lines.ts, 1);
create_test!(javadoc_clean_simple.java, 0);
create_test!(javadoc_complex.java, 5);
create_test!(issue_132.rs, 1);
create_test!(laravel_app.php, 2);
create_test!(ignore_shebang_1.sh, 0);
create_test!(ignore_shebang_2.sh, 0);
create_test!(ignore_shebang_3.sh, 0);
create_test!(ignore_shebang_4.sh, 1);
create_test!(common.mill, 1);
create_test!(basic_kotlin.kt, 0);
create_test!(basic.clj, 12);
create_test!(julia.jl, 11);
// Checks that some comments are masked out
create_test!(ignore_comments.rs, 1);
create_test!(ignore_comments.c, 1);
create_test!(ignore_comments.sol, 1);
// These are to make sure nothing crashes.
create_test!(empty.js, 0);
create_test!(issue_229.js, 0);
create_test!(issue_229.c, 0);
create_test!(issue_229.cs, 0);
create_test!(eof.rs, 0);