diff --git a/src/doc/rustc-dev-guide/src/rustdoc-internals/search.md b/src/doc/rustc-dev-guide/src/rustdoc-internals/search.md index beff0a94c1ecd..9cf59ea0c3812 100644 --- a/src/doc/rustc-dev-guide/src/rustdoc-internals/search.md +++ b/src/doc/rustc-dev-guide/src/rustdoc-internals/search.md @@ -521,4 +521,25 @@ const EXPECTED = [ returned: [], }, ] -``` \ No newline at end of file +``` + +If the [`//@ revisions`] directive is used, the JS file will +have access to a variable called `REVISION`. + +```js +const EXPECTED = [ + // This first test targets name-based search. + { + query: "constructor", + others: REVISION === "has_constructor" ? + [ + { path: "constructor_search", name: "constructor" }, + ] : + [], + in_args: [], + returned: [], + }, +]; +``` + +[`//@ revisions`]: ../tests/compiletest.md#revisions diff --git a/src/tools/compiletest/src/runtest/js_doc.rs b/src/tools/compiletest/src/runtest/js_doc.rs index 93b05617e6f8c..f7c2e6f01180a 100644 --- a/src/tools/compiletest/src/runtest/js_doc.rs +++ b/src/tools/compiletest/src/runtest/js_doc.rs @@ -18,7 +18,9 @@ impl TestCx<'_> { .arg("--crate-name") .arg(file_stem.replace("-", "_")) .arg("--test-file") - .arg(self.testpaths.file.with_extension("js")), + .arg(self.testpaths.file.with_extension("js")) + .arg("--revision") + .arg(self.revision.unwrap_or_default()), ); if !res.status.success() { self.fatal_proc_rec("rustdoc-js test failed!", &res); diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js index ff809d58e907c..124839efdd029 100644 --- a/src/tools/rustdoc-js/tester.js +++ b/src/tools/rustdoc-js/tester.js @@ -364,10 +364,10 @@ function hasCheck(content, checkName) { return content.startsWith(`const ${checkName}`) || content.includes(`\nconst ${checkName}`); } -async function runChecks(testFile, doSearch, parseQuery) { +async function runChecks(testFile, doSearch, parseQuery, revision) { let checkExpected = false; let checkParsed = false; - let testFileContent = readFile(testFile); + let testFileContent = `const REVISION = "${revision}";\n${readFile(testFile)}`; if (testFileContent.indexOf("FILTER_CRATE") !== -1) { testFileContent += "exports.FILTER_CRATE = FILTER_CRATE;"; @@ -548,6 +548,7 @@ function parseOptions(args) { "doc_folder": "", "test_folder": "", "test_file": [], + "revision": "", }; const correspondences = { "--resource-suffix": "resource_suffix", @@ -555,6 +556,7 @@ function parseOptions(args) { "--test-folder": "test_folder", "--test-file": "test_file", "--crate-name": "crate_name", + "--revision": "revision", }; for (let i = 0; i < args.length; ++i) { @@ -611,7 +613,7 @@ async function main(argv) { if (opts["test_file"].length !== 0) { for (const file of opts["test_file"]) { process.stdout.write(`Testing ${file} ... `); - errors += await runChecks(file, doSearch, parseAndSearch.parseQuery); + errors += await runChecks(file, doSearch, parseAndSearch.parseQuery, opts.revision); } } else if (opts["test_folder"].length !== 0) { for (const file of fs.readdirSync(opts["test_folder"])) { @@ -619,7 +621,7 @@ async function main(argv) { continue; } process.stdout.write(`Testing ${file} ... `); - errors += await runChecks(path.join(opts["test_folder"], file), doSearch, + errors += await runChecks(path.join(opts["test_folder"], file, ""), doSearch, parseAndSearch.parseQuery); } } diff --git a/tests/rustdoc-js/auxiliary/merged-dep.rs b/tests/rustdoc-js/auxiliary/merged-dep.rs new file mode 100644 index 0000000000000..fadeb6c65270e --- /dev/null +++ b/tests/rustdoc-js/auxiliary/merged-dep.rs @@ -0,0 +1,6 @@ +//@ unique-doc-out-dir +//@ doc-flags:--merge=none +//@ doc-flags:--parts-out-dir=info/doc.parts/merged-dep +//@ doc-flags:-Zunstable-options + +pub struct Dep; diff --git a/tests/rustdoc-js/merged-doc.js b/tests/rustdoc-js/merged-doc.js new file mode 100644 index 0000000000000..4380abb5912ed --- /dev/null +++ b/tests/rustdoc-js/merged-doc.js @@ -0,0 +1,15 @@ +const EXPECTED = [ + { + 'query': 'merged_doc::Doc', + 'others': [ + { 'path': 'merged_doc', 'name': 'Doc' }, + ], + }, + { + 'query': 'merged_dep::Dep', + 'others': REVISION === "nomerge" ? [] : + [ + { 'path': 'merged_dep', 'name': 'Dep' }, + ], + }, +]; diff --git a/tests/rustdoc-js/merged-doc.rs b/tests/rustdoc-js/merged-doc.rs new file mode 100644 index 0000000000000..ef7ce4b1fd365 --- /dev/null +++ b/tests/rustdoc-js/merged-doc.rs @@ -0,0 +1,10 @@ +//@ revisions: merge nomerge +//@ aux-build:merged-dep.rs +//@ build-aux-docs +//@[merge] doc-flags:--merge=finalize +//@[merge] doc-flags:--include-parts-dir=info/doc.parts/merged-dep +//@[merge] doc-flags:-Zunstable-options + +extern crate merged_dep; + +pub struct Doc;