aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-03-17 09:46:46 +0000
committerAleksey Kladov <[email protected]>2020-03-17 10:42:54 +0000
commitde7662c852353febce09196199202ee7f6e8e6c3 (patch)
treeff98e8e779dfe2c7e2a3eebf84dca6020f5db1b2
parent089c5547709bb8e7e60388c4f9a5e25c394c1f39 (diff)
Check that no file contains trailing ws
rustfmt allows trailing spaces in string literals unfortunately.
-rw-r--r--crates/ra_hir_def/src/nameres/tests.rs4
-rw-r--r--crates/ra_hir_def/src/nameres/tests/globs.rs92
-rw-r--r--crates/ra_hir_def/src/nameres/tests/macros.rs34
-rw-r--r--crates/ra_hir_def/src/nameres/tests/mod_resolution.rs84
-rw-r--r--crates/ra_ide/src/goto_definition.rs8
-rw-r--r--xtask/tests/tidy-tests/main.rs47
6 files changed, 142 insertions, 127 deletions
diff --git a/crates/ra_hir_def/src/nameres/tests.rs b/crates/ra_hir_def/src/nameres/tests.rs
index 3f33a75b9..949ca7595 100644
--- a/crates/ra_hir_def/src/nameres/tests.rs
+++ b/crates/ra_hir_def/src/nameres/tests.rs
@@ -12,8 +12,8 @@ use test_utils::covers;
12 12
13use crate::{db::DefDatabase, nameres::*, test_db::TestDB}; 13use crate::{db::DefDatabase, nameres::*, test_db::TestDB};
14 14
15fn def_map(fixture: &str) -> String { 15fn def_map(ra_fixture: &str) -> String {
16 compute_crate_def_map(fixture).dump() 16 compute_crate_def_map(ra_fixture).dump()
17} 17}
18 18
19fn compute_crate_def_map(fixture: &str) -> Arc<CrateDefMap> { 19fn compute_crate_def_map(fixture: &str) -> Arc<CrateDefMap> {
diff --git a/crates/ra_hir_def/src/nameres/tests/globs.rs b/crates/ra_hir_def/src/nameres/tests/globs.rs
index 71fa0abe8..ee8df3a26 100644
--- a/crates/ra_hir_def/src/nameres/tests/globs.rs
+++ b/crates/ra_hir_def/src/nameres/tests/globs.rs
@@ -3,7 +3,7 @@ use super::*;
3#[test] 3#[test]
4fn glob_1() { 4fn glob_1() {
5 let map = def_map( 5 let map = def_map(
6 " 6 r"
7 //- /lib.rs 7 //- /lib.rs
8 mod foo; 8 mod foo;
9 use foo::*; 9 use foo::*;
@@ -76,7 +76,7 @@ fn glob_2() {
76#[test] 76#[test]
77fn glob_privacy_1() { 77fn glob_privacy_1() {
78 let map = def_map( 78 let map = def_map(
79 " 79 r"
80 //- /lib.rs 80 //- /lib.rs
81 mod foo; 81 mod foo;
82 use foo::*; 82 use foo::*;
@@ -93,21 +93,21 @@ fn glob_privacy_1() {
93 ", 93 ",
94 ); 94 );
95 assert_snapshot!(map, @r###" 95 assert_snapshot!(map, @r###"
96 crate 96 crate
97 Baz: t v 97 Baz: t v
98 bar: t 98 bar: t
99 foo: t 99 foo: t
100 100
101 crate::foo 101 crate::foo
102 Baz: t v 102 Baz: t v
103 PrivateStructFoo: t v 103 PrivateStructFoo: t v
104 bar: t 104 bar: t
105 105
106 crate::foo::bar 106 crate::foo::bar
107 Baz: t v 107 Baz: t v
108 PrivateStructBar: t v 108 PrivateStructBar: t v
109 PrivateStructFoo: t v 109 PrivateStructFoo: t v
110 bar: t 110 bar: t
111 "### 111 "###
112 ); 112 );
113} 113}
@@ -115,7 +115,7 @@ fn glob_privacy_1() {
115#[test] 115#[test]
116fn glob_privacy_2() { 116fn glob_privacy_2() {
117 let map = def_map( 117 let map = def_map(
118 " 118 r"
119 //- /lib.rs 119 //- /lib.rs
120 mod foo; 120 mod foo;
121 use foo::*; 121 use foo::*;
@@ -133,19 +133,19 @@ fn glob_privacy_2() {
133 ", 133 ",
134 ); 134 );
135 assert_snapshot!(map, @r###" 135 assert_snapshot!(map, @r###"
136 crate 136 crate
137 Foo: t 137 Foo: t
138 PubCrateStruct: t v 138 PubCrateStruct: t v
139 foo: t 139 foo: t
140 140
141 crate::foo 141 crate::foo
142 Foo: t v 142 Foo: t v
143 bar: t 143 bar: t
144 144
145 crate::foo::bar 145 crate::foo::bar
146 PrivateBar: t v 146 PrivateBar: t v
147 PrivateBaz: t v 147 PrivateBaz: t v
148 PubCrateStruct: t v 148 PubCrateStruct: t v
149 "### 149 "###
150 ); 150 );
151} 151}
@@ -154,7 +154,7 @@ fn glob_privacy_2() {
154fn glob_across_crates() { 154fn glob_across_crates() {
155 covers!(glob_across_crates); 155 covers!(glob_across_crates);
156 let map = def_map( 156 let map = def_map(
157 " 157 r"
158 //- /main.rs crate:main deps:test_crate 158 //- /main.rs crate:main deps:test_crate
159 use test_crate::*; 159 use test_crate::*;
160 160
@@ -163,8 +163,8 @@ fn glob_across_crates() {
163 ", 163 ",
164 ); 164 );
165 assert_snapshot!(map, @r###" 165 assert_snapshot!(map, @r###"
166 ⋮crate 166 ⋮crate
167 ⋮Baz: t v 167 ⋮Baz: t v
168 "### 168 "###
169 ); 169 );
170} 170}
@@ -173,7 +173,7 @@ fn glob_across_crates() {
173fn glob_privacy_across_crates() { 173fn glob_privacy_across_crates() {
174 covers!(glob_across_crates); 174 covers!(glob_across_crates);
175 let map = def_map( 175 let map = def_map(
176 " 176 r"
177 //- /main.rs crate:main deps:test_crate 177 //- /main.rs crate:main deps:test_crate
178 use test_crate::*; 178 use test_crate::*;
179 179
@@ -183,8 +183,8 @@ fn glob_privacy_across_crates() {
183 ", 183 ",
184 ); 184 );
185 assert_snapshot!(map, @r###" 185 assert_snapshot!(map, @r###"
186 ⋮crate 186 ⋮crate
187 ⋮Baz: t v 187 ⋮Baz: t v
188 "### 188 "###
189 ); 189 );
190} 190}
@@ -202,10 +202,10 @@ fn glob_enum() {
202 ", 202 ",
203 ); 203 );
204 assert_snapshot!(map, @r###" 204 assert_snapshot!(map, @r###"
205 ⋮crate 205 ⋮crate
206 ⋮Bar: t v 206 ⋮Bar: t v
207 ⋮Baz: t v 207 ⋮Baz: t v
208 ⋮Foo: t 208 ⋮Foo: t
209 "### 209 "###
210 ); 210 );
211} 211}
@@ -214,7 +214,7 @@ fn glob_enum() {
214fn glob_enum_group() { 214fn glob_enum_group() {
215 covers!(glob_enum_group); 215 covers!(glob_enum_group);
216 let map = def_map( 216 let map = def_map(
217 " 217 r"
218 //- /lib.rs 218 //- /lib.rs
219 enum Foo { 219 enum Foo {
220 Bar, Baz 220 Bar, Baz
@@ -223,10 +223,10 @@ fn glob_enum_group() {
223 ", 223 ",
224 ); 224 );
225 assert_snapshot!(map, @r###" 225 assert_snapshot!(map, @r###"
226 ⋮crate 226 ⋮crate
227 ⋮Bar: t v 227 ⋮Bar: t v
228 ⋮Baz: t v 228 ⋮Baz: t v
229 ⋮Foo: t 229 ⋮Foo: t
230 "### 230 "###
231 ); 231 );
232} 232}
diff --git a/crates/ra_hir_def/src/nameres/tests/macros.rs b/crates/ra_hir_def/src/nameres/tests/macros.rs
index d104f5993..b0befdfbd 100644
--- a/crates/ra_hir_def/src/nameres/tests/macros.rs
+++ b/crates/ra_hir_def/src/nameres/tests/macros.rs
@@ -3,7 +3,7 @@ use super::*;
3#[test] 3#[test]
4fn macro_rules_are_globally_visible() { 4fn macro_rules_are_globally_visible() {
5 let map = def_map( 5 let map = def_map(
6 " 6 r"
7 //- /lib.rs 7 //- /lib.rs
8 macro_rules! structs { 8 macro_rules! structs {
9 ($($i:ident),*) => { 9 ($($i:ident),*) => {
@@ -31,7 +31,7 @@ fn macro_rules_are_globally_visible() {
31#[test] 31#[test]
32fn macro_rules_can_define_modules() { 32fn macro_rules_can_define_modules() {
33 let map = def_map( 33 let map = def_map(
34 " 34 r"
35 //- /lib.rs 35 //- /lib.rs
36 macro_rules! m { 36 macro_rules! m {
37 ($name:ident) => { mod $name; } 37 ($name:ident) => { mod $name; }
@@ -51,21 +51,21 @@ fn macro_rules_can_define_modules() {
51 ", 51 ",
52 ); 52 );
53 assert_snapshot!(map, @r###" 53 assert_snapshot!(map, @r###"
54 crate 54 crate
55 m: t 55 m: t
56 n1: t 56 n1: t
57 57
58 crate::m 58 crate::m
59 n3: t 59 n3: t
60 60
61 crate::m::n3 61 crate::m::n3
62 Y: t v 62 Y: t v
63 63
64 crate::n1 64 crate::n1
65 n2: t 65 n2: t
66 66
67 crate::n1::n2 67 crate::n1::n2
68 X: t v 68 X: t v
69 "###); 69 "###);
70} 70}
71 71
diff --git a/crates/ra_hir_def/src/nameres/tests/mod_resolution.rs b/crates/ra_hir_def/src/nameres/tests/mod_resolution.rs
index 22103ab29..b502a4079 100644
--- a/crates/ra_hir_def/src/nameres/tests/mod_resolution.rs
+++ b/crates/ra_hir_def/src/nameres/tests/mod_resolution.rs
@@ -4,7 +4,7 @@ use super::*;
4fn name_res_works_for_broken_modules() { 4fn name_res_works_for_broken_modules() {
5 covers!(name_res_works_for_broken_modules); 5 covers!(name_res_works_for_broken_modules);
6 let map = def_map( 6 let map = def_map(
7 " 7 r"
8 //- /lib.rs 8 //- /lib.rs
9 mod foo // no `;`, no body 9 mod foo // no `;`, no body
10 10
@@ -28,7 +28,7 @@ fn name_res_works_for_broken_modules() {
28#[test] 28#[test]
29fn nested_module_resolution() { 29fn nested_module_resolution() {
30 let map = def_map( 30 let map = def_map(
31 " 31 r"
32 //- /lib.rs 32 //- /lib.rs
33 mod n1; 33 mod n1;
34 34
@@ -55,7 +55,7 @@ fn nested_module_resolution() {
55#[test] 55#[test]
56fn nested_module_resolution_2() { 56fn nested_module_resolution_2() {
57 let map = def_map( 57 let map = def_map(
58 " 58 r"
59 //- /lib.rs 59 //- /lib.rs
60 mod prelude; 60 mod prelude;
61 mod iter; 61 mod iter;
@@ -77,23 +77,23 @@ fn nested_module_resolution_2() {
77 ); 77 );
78 78
79 assert_snapshot!(map, @r###" 79 assert_snapshot!(map, @r###"
80 crate 80 crate
81 iter: t 81 iter: t
82 prelude: t 82 prelude: t
83 83
84 crate::iter 84 crate::iter
85 Iterator: t 85 Iterator: t
86 traits: t 86 traits: t
87 87
88 crate::iter::traits 88 crate::iter::traits
89 Iterator: t 89 Iterator: t
90 iterator: t 90 iterator: t
91 91
92 crate::iter::traits::iterator 92 crate::iter::traits::iterator
93 Iterator: t 93 Iterator: t
94 94
95 crate::prelude 95 crate::prelude
96 Iterator: t 96 Iterator: t
97 "###); 97 "###);
98} 98}
99 99
@@ -780,17 +780,17 @@ fn nested_out_of_line_module() {
780 ); 780 );
781 781
782 assert_snapshot!(map, @r###" 782 assert_snapshot!(map, @r###"
783 crate 783 crate
784 a: t 784 a: t
785 785
786 crate::a 786 crate::a
787 b: t 787 b: t
788 788
789 crate::a::b 789 crate::a::b
790 c: t 790 c: t
791 791
792 crate::a::b::c 792 crate::a::b::c
793 X: t v 793 X: t v
794 "###); 794 "###);
795} 795}
796 796
@@ -812,16 +812,16 @@ fn nested_out_of_line_module_with_path() {
812 ); 812 );
813 813
814 assert_snapshot!(map, @r###" 814 assert_snapshot!(map, @r###"
815 crate 815 crate
816 a: t 816 a: t
817 817
818 crate::a 818 crate::a
819 b: t 819 b: t
820 820
821 crate::a::b 821 crate::a::b
822 c: t 822 c: t
823 823
824 crate::a::b::c 824 crate::a::b::c
825 X: t v 825 X: t v
826 "###); 826 "###);
827} 827}
diff --git a/crates/ra_ide/src/goto_definition.rs b/crates/ra_ide/src/goto_definition.rs
index a7be92ce3..502fcb0cf 100644
--- a/crates/ra_ide/src/goto_definition.rs
+++ b/crates/ra_ide/src/goto_definition.rs
@@ -100,8 +100,8 @@ mod tests {
100 100
101 use crate::mock_analysis::analysis_and_position; 101 use crate::mock_analysis::analysis_and_position;
102 102
103 fn check_goto(fixture: &str, expected: &str, expected_range: &str) { 103 fn check_goto(ra_fixture: &str, expected: &str, expected_range: &str) {
104 let (analysis, pos) = analysis_and_position(fixture); 104 let (analysis, pos) = analysis_and_position(ra_fixture);
105 105
106 let mut navs = analysis.goto_definition(pos).unwrap().unwrap().info; 106 let mut navs = analysis.goto_definition(pos).unwrap().unwrap().info;
107 assert_eq!(navs.len(), 1); 107 assert_eq!(navs.len(), 1);
@@ -790,8 +790,8 @@ mod tests {
790 #[test] 790 #[test]
791 fn goto_def_in_local_macro() { 791 fn goto_def_in_local_macro() {
792 check_goto( 792 check_goto(
793 " 793 r"
794 //- /lib.rs 794 //- /lib.rs
795 fn bar() { 795 fn bar() {
796 macro_rules! foo { () => { () } } 796 macro_rules! foo { () => { () } }
797 <|>foo!(); 797 <|>foo!();
diff --git a/xtask/tests/tidy-tests/main.rs b/xtask/tests/tidy-tests/main.rs
index 2d2d88bec..5ae86c87c 100644
--- a/xtask/tests/tidy-tests/main.rs
+++ b/xtask/tests/tidy-tests/main.rs
@@ -14,6 +14,7 @@ fn rust_files_are_tidy() {
14 for path in rust_files() { 14 for path in rust_files() {
15 let text = fs2::read_to_string(&path).unwrap(); 15 let text = fs2::read_to_string(&path).unwrap();
16 check_todo(&path, &text); 16 check_todo(&path, &text);
17 check_trailing_ws(&path, &text);
17 tidy_docs.visit(&path, &text); 18 tidy_docs.visit(&path, &text);
18 } 19 }
19 tidy_docs.finish(); 20 tidy_docs.finish();
@@ -33,6 +34,17 @@ fn check_todo(path: &Path, text: &str) {
33 } 34 }
34} 35}
35 36
37fn check_trailing_ws(path: &Path, text: &str) {
38 if is_exclude_dir(path, &["test_data"]) {
39 return;
40 }
41 for line in text.lines() {
42 if line.chars().last().map(char::is_whitespace) == Some(true) {
43 panic!("Trailing whitespace in {}", path.display())
44 }
45 }
46}
47
36#[derive(Default)] 48#[derive(Default)]
37struct TidyDocs { 49struct TidyDocs {
38 missing_docs: Vec<String>, 50 missing_docs: Vec<String>,
@@ -41,7 +53,13 @@ struct TidyDocs {
41 53
42impl TidyDocs { 54impl TidyDocs {
43 fn visit(&mut self, path: &Path, text: &str) { 55 fn visit(&mut self, path: &Path, text: &str) {
44 if is_exclude_dir(path) || is_exclude_file(path) { 56 // Test hopefully don't really need comments, and for assists we already
57 // have special comments which are source of doc tests and user docs.
58 if is_exclude_dir(path, &["tests", "test_data", "handlers"]) {
59 return;
60 }
61
62 if is_exclude_file(path) {
45 return; 63 return;
46 } 64 }
47 65
@@ -58,21 +76,6 @@ impl TidyDocs {
58 self.missing_docs.push(path.display().to_string()); 76 self.missing_docs.push(path.display().to_string());
59 } 77 }
60 78
61 fn is_exclude_dir(p: &Path) -> bool {
62 // Test hopefully don't really need comments, and for assists we already
63 // have special comments which are source of doc tests and user docs.
64 let exclude_dirs = ["tests", "test_data", "handlers"];
65 let mut cur_path = p;
66 while let Some(path) = cur_path.parent() {
67 if exclude_dirs.iter().any(|dir| path.ends_with(dir)) {
68 return true;
69 }
70 cur_path = path;
71 }
72
73 false
74 }
75
76 fn is_exclude_file(d: &Path) -> bool { 79 fn is_exclude_file(d: &Path) -> bool {
77 let file_names = ["tests.rs"]; 80 let file_names = ["tests.rs"];
78 81
@@ -128,6 +131,18 @@ impl TidyDocs {
128 } 131 }
129} 132}
130 133
134fn is_exclude_dir(p: &Path, dirs_to_exclude: &[&str]) -> bool {
135 let mut cur_path = p;
136 while let Some(path) = cur_path.parent() {
137 if dirs_to_exclude.iter().any(|dir| path.ends_with(dir)) {
138 return true;
139 }
140 cur_path = path;
141 }
142
143 false
144}
145
131fn rust_files() -> impl Iterator<Item = PathBuf> { 146fn rust_files() -> impl Iterator<Item = PathBuf> {
132 let crates = project_root().join("crates"); 147 let crates = project_root().join("crates");
133 let iter = WalkDir::new(crates); 148 let iter = WalkDir::new(crates);