Rollup merge of #83865 - camelid:disamb-err-fix, r=jyn514
Don't report disambiguator error if link would have been ignored Fixes #83859. This prevents us from warning on links such as `<hello@example.com>`. Note that we still warn on links such as `<hello@localhost>` because they have no dots in them. However, the links will still work, even though a warning is reported. r? ````@jyn514````
This commit is contained in:
commit
3ca197e89c
4 changed files with 51 additions and 4 deletions
|
@ -978,14 +978,18 @@ impl LinkCollector<'_, '_> {
|
||||||
Ok(Some((d, path))) => (path.trim(), Some(d)),
|
Ok(Some((d, path))) => (path.trim(), Some(d)),
|
||||||
Ok(None) => (link.trim(), None),
|
Ok(None) => (link.trim(), None),
|
||||||
Err((err_msg, relative_range)) => {
|
Err((err_msg, relative_range)) => {
|
||||||
let disambiguator_range = (no_backticks_range.start + relative_range.start)
|
if !should_ignore_link_with_disambiguators(link) {
|
||||||
..(no_backticks_range.start + relative_range.end);
|
// Only report error if we would not have ignored this link.
|
||||||
disambiguator_error(self.cx, &item, dox, disambiguator_range, &err_msg);
|
// See issue #83859.
|
||||||
|
let disambiguator_range = (no_backticks_range.start + relative_range.start)
|
||||||
|
..(no_backticks_range.start + relative_range.end);
|
||||||
|
disambiguator_error(self.cx, &item, dox, disambiguator_range, &err_msg);
|
||||||
|
}
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if path_str.contains(|ch: char| !(ch.is_alphanumeric() || ":_<>, !*&;".contains(ch))) {
|
if should_ignore_link(path_str) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1515,6 +1519,22 @@ fn range_between_backticks(ori_link: &MarkdownLink) -> Range<usize> {
|
||||||
..(ori_link.range.start + before_second_backtick_group)
|
..(ori_link.range.start + before_second_backtick_group)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns true if we should ignore `link` due to it being unlikely
|
||||||
|
/// that it is an intra-doc link. `link` should still have disambiguators
|
||||||
|
/// if there were any.
|
||||||
|
///
|
||||||
|
/// The difference between this and [`should_ignore_link()`] is that this
|
||||||
|
/// check should only be used on links that still have disambiguators.
|
||||||
|
fn should_ignore_link_with_disambiguators(link: &str) -> bool {
|
||||||
|
link.contains(|ch: char| !(ch.is_alphanumeric() || ":_<>, !*&;@()".contains(ch)))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns true if we should ignore `path_str` due to it being unlikely
|
||||||
|
/// that it is an intra-doc link.
|
||||||
|
fn should_ignore_link(path_str: &str) -> bool {
|
||||||
|
path_str.contains(|ch: char| !(ch.is_alphanumeric() || ":_<>, !*&;".contains(ch)))
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||||
/// Disambiguators for a link.
|
/// Disambiguators for a link.
|
||||||
crate enum Disambiguator {
|
crate enum Disambiguator {
|
||||||
|
|
6
src/test/rustdoc-ui/intra-doc/email-address-localhost.rs
Normal file
6
src/test/rustdoc-ui/intra-doc/email-address-localhost.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
|
//! Email me at <hello@localhost>.
|
||||||
|
//~^ ERROR unknown disambiguator `hello`
|
||||||
|
|
||||||
|
//! This should *not* warn: <hello@example.com>.
|
15
src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr
Normal file
15
src/test/rustdoc-ui/intra-doc/email-address-localhost.stderr
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
error: unknown disambiguator `hello`
|
||||||
|
--> $DIR/email-address-localhost.rs:3:18
|
||||||
|
|
|
||||||
|
LL | //! Email me at <hello@localhost>.
|
||||||
|
| ^^^^^
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/email-address-localhost.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(warnings)]
|
||||||
|
| ^^^^^^^^
|
||||||
|
= note: `#[deny(rustdoc::broken_intra_doc_links)]` implied by `#[deny(warnings)]`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
6
src/test/rustdoc/intra-doc/email-address.rs
Normal file
6
src/test/rustdoc/intra-doc/email-address.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
//! Email me at <hello@example.com>.
|
||||||
|
//! Email me at <hello-world@example.com>.
|
||||||
|
//! Email me at <hello@localhost> (this warns but will still become a link).
|
||||||
|
// @has email_address/index.html '//a[@href="mailto:hello@example.com"]' 'hello@example.com'
|
||||||
|
// @has email_address/index.html '//a[@href="mailto:hello-world@example.com"]' 'hello-world@example.com'
|
||||||
|
// @has email_address/index.html '//a[@href="mailto:hello@localhost"]' 'hello@localhost'
|
Loading…
Add table
Add a link
Reference in a new issue