diff options
| author | bors <bors@rust-lang.org> | 2021-05-08 00:37:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-05-08 00:37:38 +0000 |
| commit | abf3ec5b3353be973b18269fcdda76a59743f235 (patch) | |
| tree | 6109eee77b56b95c58cf55d7fb353aab1674189d /src | |
| parent | 467253ff6a2aecd008d273286315ac14ff8ad937 (diff) | |
| parent | 885231768b0315a618e037396a17a13d4b1f25f9 (diff) | |
| download | rust-abf3ec5b3353be973b18269fcdda76a59743f235.tar.gz rust-abf3ec5b3353be973b18269fcdda76a59743f235.zip | |
Auto merge of #85057 - Dylan-DPC:rollup-efaseq2, r=Dylan-DPC
Rollup of 6 pull requests Successful merges: - #76808 (Improve diagnostics for functions in `struct` definitions) - #84887 (Remove SpanInterner::get) - #85034 (fix null pointer error messages) - #85038 (Don't stop running rustdoc-gui tests at first failure) - #85044 (Use `path.exists()` instead of `fs::metadata(path).is_ok()`) - #85052 (rustdoc: Link to the docs on namespaces when an unknown disambiguator is found) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/test.rs | 30 | ||||
| -rw-r--r-- | src/librustdoc/passes/collect_intra_doc_links.rs | 5 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr | 1 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/intra-doc/unknown-disambiguator.stderr | 11 | ||||
| -rw-r--r-- | src/test/ui/consts/const-eval/ub-wide-ptr.32bit.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/consts/const-eval/ub-wide-ptr.64bit.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/consts/offset_from_ub.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/structs/struct-fn-in-definition.rs | 33 | ||||
| -rw-r--r-- | src/test/ui/structs/struct-fn-in-definition.stderr | 29 | ||||
| -rw-r--r-- | src/tools/rustdoc-gui/tester.js | 54 |
10 files changed, 119 insertions, 50 deletions
diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs index c98398cf1d2..df467bebe74 100644 --- a/src/bootstrap/test.rs +++ b/src/bootstrap/test.rs @@ -831,28 +831,14 @@ impl Step for RustdocGUI { command.arg("src/test/rustdoc-gui/lib.rs").arg("-o").arg(&out_dir); builder.run(&mut command); - let mut tests = Vec::new(); - for file in fs::read_dir("src/test/rustdoc-gui").unwrap() { - let file = file.unwrap(); - let file_path = file.path(); - let file_name = file.file_name(); - - if !file_name.to_str().unwrap().ends_with(".goml") { - continue; - } - tests.push(file_path); - } - tests.sort_unstable(); - for test in tests { - let mut command = Command::new(&nodejs); - command - .arg("src/tools/rustdoc-gui/tester.js") - .arg("--doc-folder") - .arg(out_dir.join("test_docs")) - .arg("--test-file") - .arg(test); - builder.run(&mut command); - } + let mut command = Command::new(&nodejs); + command + .arg("src/tools/rustdoc-gui/tester.js") + .arg("--doc-folder") + .arg(out_dir.join("test_docs")) + .arg("--tests-folder") + .arg("src/test/rustdoc-gui"); + builder.run(&mut command); } else { builder.info("No nodejs found, skipping \"src/test/rustdoc-gui\" tests"); } diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 25b6c187f3b..4317b974735 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -2017,7 +2017,10 @@ fn disambiguator_error( msg: &str, ) { diag_info.link_range = disambiguator_range; - report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, &diag_info, |_diag, _sp| {}); + report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, &diag_info, |diag, _sp| { + let msg = "see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators"; + diag.note(msg); + }); } /// Report an ambiguity error, where there were multiple possible resolutions. diff --git a/src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr b/src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr index de215b2163b..f287f87408c 100644 --- a/src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr +++ b/src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr @@ -10,6 +10,7 @@ note: the lint level is defined here LL | #![deny(warnings)] | ^^^^^^^^ = note: `#[deny(rustdoc::broken_intra_doc_links)]` implied by `#[deny(warnings)]` + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: aborting due to previous error diff --git a/src/test/rustdoc-ui/intra-doc/unknown-disambiguator.stderr b/src/test/rustdoc-ui/intra-doc/unknown-disambiguator.stderr index 195aaca32a2..94d6d461651 100644 --- a/src/test/rustdoc-ui/intra-doc/unknown-disambiguator.stderr +++ b/src/test/rustdoc-ui/intra-doc/unknown-disambiguator.stderr @@ -10,36 +10,47 @@ note: the lint level is defined here LL | #![deny(warnings)] | ^^^^^^^^ = note: `#[deny(rustdoc::broken_intra_doc_links)]` implied by `#[deny(warnings)]` + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: unknown disambiguator `bar` --> $DIR/unknown-disambiguator.rs:3:35 | LL | //! Linking to [foo@banana] and [`bar@banana!()`]. | ^^^ + | + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: unknown disambiguator `foo` --> $DIR/unknown-disambiguator.rs:9:34 | LL | //! And with weird backticks: [``foo@hello``] [foo`@`hello]. | ^^^ + | + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: unknown disambiguator `foo` --> $DIR/unknown-disambiguator.rs:9:48 | LL | //! And with weird backticks: [``foo@hello``] [foo`@`hello]. | ^^^ + | + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: unknown disambiguator `` --> $DIR/unknown-disambiguator.rs:6:31 | LL | //! And to [no disambiguator](@nectarine) and [another](@apricot!()). | ^ + | + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: unknown disambiguator `` --> $DIR/unknown-disambiguator.rs:6:57 | LL | //! And to [no disambiguator](@nectarine) and [another](@apricot!()). | ^ + | + = note: see https://doc.rust-lang.org/nightly/rustdoc/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators error: aborting due to 6 previous errors diff --git a/src/test/ui/consts/const-eval/ub-wide-ptr.32bit.stderr b/src/test/ui/consts/const-eval/ub-wide-ptr.32bit.stderr index 404ce409d93..c69674a6721 100644 --- a/src/test/ui/consts/const-eval/ub-wide-ptr.32bit.stderr +++ b/src/test/ui/consts/const-eval/ub-wide-ptr.32bit.stderr @@ -296,7 +296,7 @@ error[E0080]: could not evaluate static initializer --> $DIR/ub-wide-ptr.rs:135:5 | LL | mem::transmute::<_, &dyn Trait>((&92u8, 0usize)) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ null pointer is not allowed for this operation + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ null pointer is not a valid pointer for this operation error[E0080]: could not evaluate static initializer --> $DIR/ub-wide-ptr.rs:139:5 diff --git a/src/test/ui/consts/const-eval/ub-wide-ptr.64bit.stderr b/src/test/ui/consts/const-eval/ub-wide-ptr.64bit.stderr index 39c56542762..bb95343a786 100644 --- a/src/test/ui/consts/const-eval/ub-wide-ptr.64bit.stderr +++ b/src/test/ui/consts/const-eval/ub-wide-ptr.64bit.stderr @@ -296,7 +296,7 @@ error[E0080]: could not evaluate static initializer --> $DIR/ub-wide-ptr.rs:135:5 | LL | mem::transmute::<_, &dyn Trait>((&92u8, 0usize)) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ null pointer is not allowed for this operation + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ null pointer is not a valid pointer for this operation error[E0080]: could not evaluate static initializer --> $DIR/ub-wide-ptr.rs:139:5 diff --git a/src/test/ui/consts/offset_from_ub.stderr b/src/test/ui/consts/offset_from_ub.stderr index d5d213f9c79..4254cda2a00 100644 --- a/src/test/ui/consts/offset_from_ub.stderr +++ b/src/test/ui/consts/offset_from_ub.stderr @@ -74,7 +74,7 @@ error: any use of this value will cause an error LL | unsafe { intrinsics::ptr_offset_from(self, origin) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | - | null pointer is not allowed for this operation + | null pointer is not a valid pointer for this operation | inside `ptr::const_ptr::<impl *const u8>::offset_from` at $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL | inside `OFFSET_FROM_NULL` at $DIR/offset_from_ub.rs:36:14 | diff --git a/src/test/ui/structs/struct-fn-in-definition.rs b/src/test/ui/structs/struct-fn-in-definition.rs new file mode 100644 index 00000000000..5ae1b727dc7 --- /dev/null +++ b/src/test/ui/structs/struct-fn-in-definition.rs @@ -0,0 +1,33 @@ +// It might be intuitive for a user coming from languages like Java +// to declare a method directly in a struct's definition. Make sure +// rustc can give a helpful suggestion. +// Suggested in issue #76421 + +struct S { + field: usize, + + fn foo() {} + //~^ ERROR functions are not allowed in struct definitions + //~| HELP unlike in C++, Java, and C#, functions are declared in `impl` blocks + //~| HELP see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information +} + +union U { + variant: usize, + + fn foo() {} + //~^ ERROR functions are not allowed in union definitions + //~| HELP unlike in C++, Java, and C#, functions are declared in `impl` blocks + //~| HELP see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information +} + +enum E { + Variant, + + fn foo() {} + //~^ ERROR functions are not allowed in enum definitions + //~| HELP unlike in C++, Java, and C#, functions are declared in `impl` blocks + //~| HELP see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information +} + +fn main() {} diff --git a/src/test/ui/structs/struct-fn-in-definition.stderr b/src/test/ui/structs/struct-fn-in-definition.stderr new file mode 100644 index 00000000000..1d7cd527295 --- /dev/null +++ b/src/test/ui/structs/struct-fn-in-definition.stderr @@ -0,0 +1,29 @@ +error: functions are not allowed in struct definitions + --> $DIR/struct-fn-in-definition.rs:9:5 + | +LL | fn foo() {} + | ^^^^^^^^^^^ + | + = help: unlike in C++, Java, and C#, functions are declared in `impl` blocks + = help: see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information + +error: functions are not allowed in union definitions + --> $DIR/struct-fn-in-definition.rs:18:5 + | +LL | fn foo() {} + | ^^^^^^^^^^^ + | + = help: unlike in C++, Java, and C#, functions are declared in `impl` blocks + = help: see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information + +error: functions are not allowed in enum definitions + --> $DIR/struct-fn-in-definition.rs:27:5 + | +LL | fn foo() {} + | ^^^^^^^^^^^ + | + = help: unlike in C++, Java, and C#, functions are declared in `impl` blocks + = help: see https://doc.rust-lang.org/book/ch05-03-method-syntax.html for more information + +error: aborting due to 3 previous errors + diff --git a/src/tools/rustdoc-gui/tester.js b/src/tools/rustdoc-gui/tester.js index a67e2455478..298fc7519fa 100644 --- a/src/tools/rustdoc-gui/tester.js +++ b/src/tools/rustdoc-gui/tester.js @@ -3,29 +3,30 @@ // ``` // npm install browser-ui-test // ``` -const path = require('path'); +const fs = require("fs"); +const path = require("path"); const {Options, runTest} = require('browser-ui-test'); function showHelp() { console.log("rustdoc-js options:"); console.log(" --doc-folder [PATH] : location of the generated doc folder"); console.log(" --help : show this message then quit"); - console.log(" --test-file [PATH] : location of the JS test file"); + console.log(" --tests-folder [PATH] : location of the .GOML tests folder"); } function parseOptions(args) { var opts = { "doc_folder": "", - "test_file": "", + "tests_folder": "", }; var correspondances = { "--doc-folder": "doc_folder", - "--test-file": "test_file", + "--tests-folder": "tests_folder", }; for (var i = 0; i < args.length; ++i) { if (args[i] === "--doc-folder" - || args[i] === "--test-file") { + || args[i] === "--tests-folder") { i += 1; if (i >= args.length) { console.log("Missing argument after `" + args[i - 1] + "` option."); @@ -41,8 +42,8 @@ function parseOptions(args) { return null; } } - if (opts["test_file"].length < 1) { - console.log("Missing `--test-file` option."); + if (opts["tests_folder"].length < 1) { + console.log("Missing `--tests-folder` option."); } else if (opts["doc_folder"].length < 1) { console.log("Missing `--doc-folder` option."); } else { @@ -51,15 +52,8 @@ function parseOptions(args) { return null; } -function checkFile(test_file, opts, loaded, index) { - const test_name = path.basename(test_file, ".js"); - - process.stdout.write('Checking "' + test_name + '" ... '); - return runChecks(test_file, loaded, index); -} - -function main(argv) { - var opts = parseOptions(argv.slice(2)); +async function main(argv) { + let opts = parseOptions(argv.slice(2)); if (opts === null) { process.exit(1); } @@ -68,7 +62,7 @@ function main(argv) { try { // This is more convenient that setting fields one by one. options.parseArguments([ - '--no-screenshot', + "--no-screenshot", "--variable", "DOC_PATH", opts["doc_folder"], ]); } catch (error) { @@ -76,14 +70,26 @@ function main(argv) { process.exit(1); } - runTest(opts["test_file"], options).then(out => { - const [output, nb_failures] = out; - console.log(output); - process.exit(nb_failures); - }).catch(err => { - console.error(err); + let failed = false; + let files = fs.readdirSync(opts["tests_folder"]).filter(file => path.extname(file) == ".goml"); + + files.sort(); + for (var i = 0; i < files.length; ++i) { + const testPath = path.join(opts["tests_folder"], files[i]); + await runTest(testPath, options).then(out => { + const [output, nb_failures] = out; + console.log(output); + if (nb_failures > 0) { + failed = true; + } + }).catch(err => { + console.error(err); + failed = true; + }); + } + if (failed) { process.exit(1); - }); + } } main(process.argv); |
