// Many examples are from
// https://github.com/rust-lang/rust/issues/110111#issuecomment-1517800781
#![deny(rustdoc::broken_intra_doc_links)]

//! This test case is closely linked to [raphlinus/pulldown-cmark#441], getting offsets of
//! link components. In particular, pulldown-cmark doesn't provide the offsets of the contents
//! of a link.
//!
//! To work around this, rustdoc parses parts of a link definition itself. This is basically a
//! test suite for that link syntax parser.
//!
//! [raphlinus/pulldown-cmark#441]: https://github.com/raphlinus/pulldown-cmark/issues/441

use std::clone::Clone;

// Basic version //

/// [`struct@Clone`] //~ERROR link
pub struct LinkToCloneWithBackquotes;

/// [```struct@Clone```] //~ERROR link
pub struct LinkToCloneWithMultipleBackquotes;

/// [  `  struct@Clone  `  ] //~ERROR link
pub struct LinkToCloneWithSpacesAndBackquotes;

/// [  `Clone ()`  ] //~ERROR link
pub struct LinkToCloneWithSpacesBackquotesAndParens;

/// [`Clone ()`  ] //~ERROR link
pub struct LinkToCloneWithSpacesEndBackquotesAndParens;

/// [  `Clone ()`] //~ERROR link
pub struct LinkToCloneWithSpacesStartBackquotesAndParens;

/// [```Clone ()```] //~ERROR link
pub struct LinkToCloneWithMultipleBackquotesAndParens;

/// [```Clone \(\)```] // not URL-shaped enough
pub struct LinkToCloneWithMultipleBackquotesAndEscapedParens;

/// [  ```  Clone ()  ```  ] //~ERROR link
pub struct LinkToCloneWithSpacesMultipleBackquotesAndParens;

/// [ x \] ] // not URL-shaped enough
pub struct LinkWithEscapedCloseBrace;

/// [ x \[ ] // not URL-shaped enough
pub struct LinkWithEscapedOpenBrace;

/// [ x \( ] // not URL-shaped enough
pub struct LinkWithEscapedCloseParen;

/// [ x \) ] // not URL-shaped enough
pub struct LinkWithEscapedOpenParen;

/// [ Clone \(\) ] // not URL-shaped enough
pub struct LinkWithEscapedParens;

// [][] version //

/// [x][ struct@Clone] //~ERROR link
pub struct XLinkToCloneWithStartSpace;

/// [x][struct@Clone ] //~ERROR link
pub struct XLinkToCloneWithEndSpace;

/// [x][Clone\(\)] not URL-shaped enough
pub struct XLinkToCloneWithEscapedParens;

/// [x][`Clone`] not URL-shaped enough
pub struct XLinkToCloneWithBackquotes;

/// [x][Clone()] //~ERROR link
pub struct XLinkToCloneWithUnescapedParens;

/// [x][Clone  ()] //~ERROR link
pub struct XLinkToCloneWithUnescapedParensAndDoubleSpace;

/// [x][Clone  [] //~ERROR unresolved link to `x`
pub struct XLinkToCloneWithUnmatchedOpenParenAndDoubleSpace;

/// [x][Clone  \[] // not URL-shaped enough
pub struct XLinkToCloneWithUnmatchedEscapedOpenParenAndDoubleSpace;

/// [x][Clone  \]] // not URL-shaped enough
pub struct XLinkToCloneWithUnmatchedEscapedCloseParenAndDoubleSpace;

// []() version //

/// [w]( struct@Clone) //~ERROR link
pub struct WLinkToCloneWithStartSpace;

/// [w](struct@Clone ) //~ERROR link
pub struct WLinkToCloneWithEndSpace;

/// [w](Clone\(\)) //~ERROR link
pub struct WLinkToCloneWithEscapedParens;

/// [w](`Clone`) not URL-shaped enough
pub struct WLinkToCloneWithBackquotes;

/// [w](Clone()) //~ERROR link
pub struct WLinkToCloneWithUnescapedParens;

/// [w](Clone  ()) not URL-shaped enough
pub struct WLinkToCloneWithUnescapedParensAndDoubleSpace;

/// [w](Clone  () //~ERROR unresolved link to `w`
pub struct WLinkToCloneWithUnmatchedOpenParenAndDoubleSpace;

/// [w](Clone  \() //~ERROR unresolved link to `w`
pub struct WLinkToCloneWithUnmatchedEscapedOpenParenAndDoubleSpace;

/// [w](Clone  \)) //~ERROR unresolved link to `w`
pub struct WLinkToCloneWithUnmatchedEscapedCloseParenAndDoubleSpace;

// References

/// The [cln][] link here is going to be unresolved, because `Clone()` gets rejected //~ERROR link
/// in Markdown for not being URL-shaped enough.
///
/// [cln]: Clone() //~ERROR link
pub struct LinkToCloneWithParensInReference;

/// The [cln][] link here is going to be unresolved, because `struct@Clone` gets //~ERROR link
/// rejected in Markdown for not being URL-shaped enough.
///
/// [cln]: struct@Clone //~ERROR link
pub struct LinkToCloneWithWrongPrefix;

/// The [cln][] link here will produce a plain text suggestion //~ERROR link
///
/// [cln]: Clone\(\)
pub struct LinkToCloneWithEscapedParensInReference;

/// The [cln][] link here will produce a plain text suggestion //~ERROR link
///
/// [cln]: struct\@Clone
pub struct LinkToCloneWithEscapedAtsInReference;