Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rustdoc Json: Add tests for Reexports, and improve jsondocck #82571

Merged
merged 2 commits into from
Mar 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/test/rustdoc-json/reexport/glob_extern.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// edition:2018

#![no_core]
#![feature(no_core)]

// @!has glob_extern.json "$.index[*][?(@.name=='mod1')]"
mod mod1 {
extern "C" {
// @set public_fn_id = - "$.index[*][?(@.name=='public_fn')].id"
pub fn public_fn();
// @!has - "$.index[*][?(@.name=='private_fn')]"
fn private_fn();
}
}

// @has - "$.index[*][?(@.name=='glob_extern')].inner.items[*]" $public_fn_id
pub use mod1::*;
Comment on lines +16 to +17
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This re-export is inlined, so the JSON shows the items at the crate root?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand the question, but yes, it shows up in the crate root

Output
{
  "crate_version": null,
  "external_crates": {},
  "format_version": 4,
  "includes_private": false,
  "index": {
    "0:0": {
      "attrs": ["#![no_core]", "#![feature(no_core)]"],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:0",
      "inner": {"is_crate": true, "items": ["0:3"]},
      "kind": "module",
      "links": {},
      "name": "glob_extern",
      "source": {"begin": [3, 0], "end": [13, 16], "filename": "glob_extern.rs"},
      "visibility": "public"
    },
    "0:3": {
      "attrs": [],
      "crate_id": 0,
      "deprecation": null,
      "docs": null,
      "id": "0:3",
      "inner": {
        "abi": "\"C\"",
        "decl": {"c_variadic": false, "inputs": [], "output": null},
        "generics": {"params": [], "where_predicates": []},
        "header": ["unsafe"]
      },
      "kind": "function",
      "links": {},
      "name": "public_fn",
      "source": {"begin": [8, 8], "end": [8, 27], "filename": "glob_extern.rs"},
      "visibility": "public"
    }
  },
  "paths": {
    "0:0": {"crate_id": 0, "kind": "module", "path": ["glob_extern"]},
    "0:3": {"crate_id": 0, "kind": "function", "path": ["glob_extern", "public_fn"]}
  },
  "root": "0:0"
}

27 changes: 27 additions & 0 deletions src/test/rustdoc-json/reexport/glob_private.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// edition:2018

#![no_core]
#![feature(no_core)]

// @!has glob_private.json "$.index[*][?(@.name=='mod1')]"
mod mod1 {
// @!has - "$.index[*][?(@.name=='mod2')]"
mod mod2 {
// @set m2pub_id = - "$.index[*][?(@.name=='Mod2Public')].id"
pub struct Mod2Public;

// @!has - "$.index[*][?(@.name=='Mod2Private')]"
struct Mod2Private;
}
pub use self::mod2::*;

// @set m1pub_id = - "$.index[*][?(@.name=='Mod1Public')].id"
pub struct Mod1Public;

// @!has - "$.index[*][?(@.name=='Mod1Private')]"
struct Mod1Private;
}
pub use mod1::*;

// @has - "$.index[*][?(@.name=='glob_private')].inner.items[*]" $m2pub_id
// @has - "$.index[*][?(@.name=='glob_private')].inner.items[*]" $m1pub_id
17 changes: 17 additions & 0 deletions src/test/rustdoc-json/reexport/rename_public.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// edition:2018

#![no_core]
#![feature(no_core)]

// @set inner_id = rename_public.json "$.index[*][?(@.name=='inner')].id"
// @has - "$.index[*][?(@.name=='rename_public')].inner.items[*]" $inner_id
pub mod inner {
// @set public_id = - "$.index[*][?(@.name=='Public')].id"
// @has - "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
pub struct Public;
}
// @set import_id = - "$.index[*][?(@.inner.name=='NewName')].id"
aDotInTheVoid marked this conversation as resolved.
Show resolved Hide resolved
// @!has - "$.index[*][?(@.inner.name=='Public')]"
// @has - "$.index[*][?(@.name=='rename_public')].inner.items[*]" $import_id
// @is - "$.index[*][?(@.inner.name=='NewName')].inner.span" \"inner::Public\"
pub use inner::Public as NewName;
13 changes: 13 additions & 0 deletions src/test/rustdoc-json/reexport/simple_private.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// edition:2018

#![no_core]
#![feature(no_core)]

// @!has simple_private.json "$.index[*][?(@.name=='inner')]"
mod inner {
// @set pub_id = - "$.index[*][?(@.name=='Public')].id"
pub struct Public;
}

// @has - "$.index[*][?(@.name=='simple_private')].inner.items[*]" $pub_id
pub use inner::Public;
18 changes: 18 additions & 0 deletions src/test/rustdoc-json/reexport/simple_public.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// edition:2018

#![no_core]
#![feature(no_core)]

// @set inner_id = simple_public.json "$.index[*][?(@.name=='inner')].id"
// @has - "$.index[*][?(@.name=='simple_public')].inner.items[*]" $inner_id
pub mod inner {

// @set public_id = - "$.index[*][?(@.name=='Public')].id"
// @has - "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
pub struct Public;
}

// @set import_id = - "$.index[*][?(@.inner.name=='Public')].id"
// @has - "$.index[*][?(@.name=='simple_public')].inner.items[*]" $import_id
// @is - "$.index[*][?(@.inner.name=='Public')].inner.span" \"inner::Public\"
pub use inner::Public;
24 changes: 22 additions & 2 deletions src/tools/jsondocck/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,21 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
let val = cache.get_value(&command.args[0])?;
let results = select(&val, &command.args[1]).unwrap();
let pat = string_to_value(&command.args[2], cache);
results.contains(&pat.as_ref())
let has = results.contains(&pat.as_ref());
// Give better error for when @has check fails
if !command.negated && !has {
return Err(CkError::FailedCheck(
format!(
"{} matched to {:?} but didn't have {:?}",
&command.args[1],
results,
pat.as_ref()
),
command,
));
} else {
has
}
}
_ => unreachable!(),
}
Expand Down Expand Up @@ -233,7 +247,13 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
assert_eq!(command.args[1], "=", "Expected an `=`");
let val = cache.get_value(&command.args[2])?;
let results = select(&val, &command.args[3]).unwrap();
assert_eq!(results.len(), 1);
assert_eq!(
results.len(),
1,
"Didn't get 1 result for `{}`: got {:?}",
command.args[3],
results
);
match results.len() {
0 => false,
1 => {
Expand Down