]> git.lizzy.rs Git - rust.git/commitdiff
Do not try to parse external modules when skipping children
authorSeiichi Uchida <seuchida@gmail.com>
Thu, 15 Feb 2018 13:48:06 +0000 (22:48 +0900)
committerSeiichi Uchida <seuchida@gmail.com>
Thu, 15 Feb 2018 13:48:06 +0000 (22:48 +0900)
rustfmt-core/src/lib.rs
rustfmt-core/tests/source/configs/skip_children/true.rs [new file with mode: 0644]
rustfmt-core/tests/target/configs/skip_children/true.rs [new file with mode: 0644]

index 092aeb7d088c9e0051d9e695687c7e3991cb2f12..3e82df9088c170586d7c646a879812a1423768c2 100644 (file)
@@ -507,14 +507,18 @@ fn format_lines(
     report.file_error_map.insert(name.clone(), errors);
 }
 
-fn parse_input(
+fn parse_input<'sess>(
     input: Input,
-    parse_session: &ParseSess,
-) -> Result<ast::Crate, Option<DiagnosticBuilder>> {
+    parse_session: &'sess ParseSess,
+    config: &Config,
+) -> Result<ast::Crate, Option<DiagnosticBuilder<'sess>>> {
     let result = match input {
         Input::File(file) => {
             let mut parser = parse::new_parser_from_file(parse_session, &file);
             parser.cfg_mods = false;
+            if config.skip_children() {
+                parser.recurse_into_file_modules = false;
+            }
             parser.parse_crate_mod()
         }
         Input::Text(text) => {
@@ -524,6 +528,9 @@ fn parse_input(
                 text,
             );
             parser.cfg_mods = false;
+            if config.skip_children() {
+                parser.recurse_into_file_modules = false;
+            }
             parser.parse_crate_mod()
         }
     };
@@ -647,7 +654,7 @@ pub fn format_input<T: Write>(
         Input::Text(..) => FileName::Custom("stdin".to_owned()),
     };
 
-    let krate = match parse_input(input, &parse_session) {
+    let krate = match parse_input(input, &parse_session, config) {
         Ok(krate) => krate,
         Err(diagnostic) => {
             if let Some(mut diagnostic) = diagnostic {
diff --git a/rustfmt-core/tests/source/configs/skip_children/true.rs b/rustfmt-core/tests/source/configs/skip_children/true.rs
new file mode 100644 (file)
index 0000000..cb2b6fc
--- /dev/null
@@ -0,0 +1,3 @@
+// rustfmt-skip_children: true
+
+mod foo  ;
diff --git a/rustfmt-core/tests/target/configs/skip_children/true.rs b/rustfmt-core/tests/target/configs/skip_children/true.rs
new file mode 100644 (file)
index 0000000..3ea9f46
--- /dev/null
@@ -0,0 +1,3 @@
+// rustfmt-skip_children: true
+
+mod foo;