From 5793b00896f63400caf9b1d27f7837071e00e498 Mon Sep 17 00:00:00 2001 From: asli Date: Fri, 7 Jun 2024 15:10:08 +0300 Subject: [PATCH 1/8] Adds more help for special links --- .../src/lints/markdown/relative_links.rs | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index c41ca317..45624f4d 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -4,7 +4,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use annotate_snippets::snippet::{Annotation, Slice, Snippet}; +use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet}; use comrak::nodes::Ast; @@ -33,6 +33,7 @@ where { fn lint<'a>(&self, slug: &'a str, ctx: &Context<'a, '_>) -> Result<(), Error> { let re = Regex::new("(^/)|(://)").unwrap(); + let eip_re = Regex::new(r"^https://eips.ethereum.org/EIPS/eip-(\d+)$").unwrap(); let exceptions = RegexSet::new(&self.exceptions).map_err(Error::custom)?; @@ -44,14 +45,33 @@ where .into_iter() .filter(|l| re.is_match(&l.address) && !exceptions.is_match(&l.address)); - for Link { line_start, .. } in links { + for Link { address, line_start } in links { + let (suggestion, extra_help) = if let Some(caps) = eip_re.captures(&address) { + (format!("./eip-{}.md", &caps[1]), true) + } else if address == "https://creativecommons.org/publicdomain/zero/1.0/" { + ("../LICENSE.md".to_string(), true) + } else { + (address, false) + }; + + let mut footer = vec![]; + + let suggestion_label = format!("use `{}` instead", suggestion); + if extra_help { + footer.push(Annotation { + annotation_type: AnnotationType::Help, + label: Some(&suggestion_label), + id: None, + }); + } + ctx.report(Snippet { title: Some(Annotation { id: Some(slug), annotation_type: ctx.annotation_type(), label: Some("non-relative link or image"), }), - footer: vec![], + footer, slices: vec![Slice { line_start, fold: false, From a9069adc3eef46e5d12a1c9ea2b4679c5baa3287 Mon Sep 17 00:00:00 2001 From: Jose Alfonso <92005826+JEAlfonsoP@users.noreply.github.com> Date: Sun, 26 Feb 2023 00:00:30 +0100 Subject: [PATCH 2/8] Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update test.yaml Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update Cargo.toml Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update test.yaml Update relative_links.rs Update test.yaml Update test.yaml Update test.yaml Update Cargo.toml Update test.yaml Update test.yaml Update test.yaml Update Cargo.toml Update test.yaml Update test.yaml Update test.yaml Update test.yaml Update test.yaml Update test.yaml Update Cargo.toml Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update Cargo.toml Update test.yaml Update test.yaml Update relative_links.rs Update Cargo.toml Update Cargo.toml Update test.yaml Update relative_links.rs Update test.yaml Update relative_links.rs Update test.yaml Update test.yaml Update relative_links.rs Update Cargo.toml Update Cargo.toml Update test.yaml Update relative_links.rs Update relative_links.rs Bit of work on implementation and more tests (#5) Update relative_links.rs Update lint_markdown_relative_links.rs Update relative_links.rs Update lint_markdown_relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs Update relative_links.rs --- .../tests/lint_markdown_relative_links.rs | 148 +++++++++++++++++- 1 file changed, 147 insertions(+), 1 deletion(-) diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index 64c66fb5..d3406440 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -1,7 +1,7 @@ /* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * file. You can obtain one at https://mozilla.org/MPL/2.0/. */ use eipw_lint::lints::markdown::RelativeLinks; @@ -69,6 +69,63 @@ header: value1 ); } +#[tokio::test] +async fn inline_link_with_scheme_to_eips_ethereum_org() { + let src = r#"--- +header: value1 +--- + +[hello](https://eips.ethereum.org/EIPS/eip-1234) +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | [hello](https://eips.ethereum.org/EIPS/eip-1234) + | + = help: use `./eip-1234.md` instead +"# + ); +} + +#[tokio::test] +async fn inline_link_with_scheme_and_numbers() { + let src = r#"--- +header: value1 +--- + +[hi](https://example.com/4444) +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | [hi](https://example.com/4444) + | +"# + ); +} + #[tokio::test] async fn inline_link_protocol_relative() { let src = r#"--- @@ -224,6 +281,37 @@ Hello [hi][hello]! assert_eq!(reports, ""); } +#[tokio::test] +async fn reference_link_with_scheme_to_eips_ethereum_org() { + let src = r#"--- +header: value1 +--- + +Hello [hi][hello]! + +[hello]: https://eips.ethereum.org/EIPS/eip-1234 +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | Hello [hi][hello]! + | + = help: use `./eip-1234.md` instead +"# + ); +} + #[tokio::test] async fn inline_autolink() { let src = r#"--- @@ -325,6 +413,35 @@ header: value1 ); } +#[tokio::test] +async fn anchor_link_protocol_relative_to_eips_ethereum_org() { + let src = r#"--- +header: value1 +--- + +example +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | example + | + = help: use `./eip-1234.md` instead +"# + ); +} + #[tokio::test] async fn anchor_link_relative_double_slash() { let src = r#"--- @@ -409,3 +526,32 @@ header: value1 "# ); } + +#[tokio::test] +async fn img_protocol_relative_to_eips_ethereum_org() { + let src = r#"--- +header: value1 +--- + + +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | + | + = help: use `../assets/eip-712/eth_sign.png` instead +"# + ); +} From af39529089d9f23c5aaab1c132b7d7e2c520407c Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Thu, 6 Jun 2024 15:43:09 -0400 Subject: [PATCH 3/8] Fix compilation issues --- eipw-lint-js/src/lib.rs | 2 +- .../tests/lint_markdown_relative_links.rs | 35 ++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/eipw-lint-js/src/lib.rs b/eipw-lint-js/src/lib.rs index d1ed248d..478b2da4 100644 --- a/eipw-lint-js/src/lib.rs +++ b/eipw-lint-js/src/lib.rs @@ -174,7 +174,7 @@ pub async fn lint(sources: Vec, options: Option) -> Result Result { - let value: serde_json::Value = serde_wasm_bindgen::from_value(snippet.deref().clone())?; + let value: serde_json::Value = serde_wasm_bindgen::from_value(snippet.clone())?; let obj = match value { serde_json::Value::Object(o) => o, diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index d3406440..b70b2ba3 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -80,7 +80,12 @@ header: value1 let reports = Linter::>::default() .clear_lints() - .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) .check_slice(None, src) .run() .await @@ -109,7 +114,12 @@ header: value1 let reports = Linter::>::default() .clear_lints() - .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) .check_slice(None, src) .run() .await @@ -294,7 +304,12 @@ Hello [hi][hello]! let reports = Linter::>::default() .clear_lints() - .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) .check_slice(None, src) .run() .await @@ -424,7 +439,12 @@ header: value1 let reports = Linter::>::default() .clear_lints() - .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) .check_slice(None, src) .run() .await @@ -538,7 +558,12 @@ header: value1 let reports = Linter::>::default() .clear_lints() - .deny("markdown-rel", RelativeLinks { exceptions: &[] }) + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) .check_slice(None, src) .run() .await From f49d11bb48556f83fe3afc9a07e282af1b075f7b Mon Sep 17 00:00:00 2001 From: asli Date: Tue, 11 Jun 2024 13:23:06 +0300 Subject: [PATCH 4/8] Handle protocol relative eips link --- eipw-lint/src/lints/markdown/relative_links.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index 45624f4d..97dd9703 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -32,8 +32,8 @@ where S: Debug + Display + AsRef, { fn lint<'a>(&self, slug: &'a str, ctx: &Context<'a, '_>) -> Result<(), Error> { - let re = Regex::new("(^/)|(://)").unwrap(); - let eip_re = Regex::new(r"^https://eips.ethereum.org/EIPS/eip-(\d+)$").unwrap(); + let re: Regex = Regex::new("(^/)|(://)").unwrap(); + let eip_re = Regex::new(r"^(https?:)?//eips\.ethereum\.org/EIPS/(eip-\d+)+$").unwrap(); let exceptions = RegexSet::new(&self.exceptions).map_err(Error::custom)?; @@ -47,7 +47,7 @@ where for Link { address, line_start } in links { let (suggestion, extra_help) = if let Some(caps) = eip_re.captures(&address) { - (format!("./eip-{}.md", &caps[1]), true) + (format!("./{}.md", &caps[2]), true) } else if address == "https://creativecommons.org/publicdomain/zero/1.0/" { ("../LICENSE.md".to_string(), true) } else { From f5f1a81c9ad730a57f48788784ba2035788f467a Mon Sep 17 00:00:00 2001 From: asli Date: Tue, 11 Jun 2024 14:30:10 +0300 Subject: [PATCH 5/8] Add more help for img asset link errors --- .../src/lints/markdown/relative_links.rs | 9 +++-- .../tests/lint_markdown_relative_links.rs | 34 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index 97dd9703..3c0ec5ba 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -33,7 +33,7 @@ where { fn lint<'a>(&self, slug: &'a str, ctx: &Context<'a, '_>) -> Result<(), Error> { let re: Regex = Regex::new("(^/)|(://)").unwrap(); - let eip_re = Regex::new(r"^(https?:)?//eips\.ethereum\.org/EIPS/(eip-\d+)+$").unwrap(); + let eip_re = Regex::new(r"^(https?:)?//eips\.ethereum\.org/(EIPS/eip-\d+|assets/.+)$").unwrap(); let exceptions = RegexSet::new(&self.exceptions).map_err(Error::custom)?; @@ -47,7 +47,12 @@ where for Link { address, line_start } in links { let (suggestion, extra_help) = if let Some(caps) = eip_re.captures(&address) { - (format!("./{}.md", &caps[2]), true) + let relevant_part = &caps[2]; + if relevant_part.starts_with("EIPS/") { + (format!("./{}.md", relevant_part.trim_start_matches("EIPS/")), true) + } else { + (format!("../{}", relevant_part), true) + } } else if address == "https://creativecommons.org/publicdomain/zero/1.0/" { ("../LICENSE.md".to_string(), true) } else { diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index b70b2ba3..9a04d669 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -580,3 +580,37 @@ header: value1 "# ); } + +#[tokio::test] +async fn img_with_scheme_to_eips_ethereum_org() { + let src = r#"--- +header: value1 +--- + + +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | + | + = help: use `../assets/eip-712/eth_sign.png` instead +"# + ); +} \ No newline at end of file From 78cb333d2759401abd7d599c20db7ca99e18eae4 Mon Sep 17 00:00:00 2001 From: asli Date: Tue, 11 Jun 2024 15:17:04 +0300 Subject: [PATCH 6/8] Add tests for copyright relative link check --- .../src/lints/markdown/relative_links.rs | 2 +- .../tests/lint_markdown_relative_links.rs | 70 ++++++++++++++++++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index 3c0ec5ba..3bfe6b56 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -53,7 +53,7 @@ where } else { (format!("../{}", relevant_part), true) } - } else if address == "https://creativecommons.org/publicdomain/zero/1.0/" { + } else if address.contains("//creativecommons.org/publicdomain/zero/1.0/") { ("../LICENSE.md".to_string(), true) } else { (address, false) diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index 9a04d669..69c83511 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -103,6 +103,40 @@ header: value1 ); } +#[tokio::test] +async fn inline_link_with_scheme_to_creativecommons_copyright() { + let src = r#"--- +header: value1 +--- + +[copyright](https://creativecommons.org/publicdomain/zero/1.0/) +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | [copyright](https://creativecommons.org/publicdomain/zero/1.0/) + | + = help: use `../LICENSE.md` instead +"# + ); +} + #[tokio::test] async fn inline_link_with_scheme_and_numbers() { let src = r#"--- @@ -488,6 +522,40 @@ header: value1 assert_eq!(reports, ""); } +#[tokio::test] +async fn anchor_link_protocol_relative_to_creativecommons_copyright() { + let src = r#"--- +header: value1 +--- + +copyright +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | copyright + | + = help: use `../LICENSE.md` instead +"# + ); +} + #[tokio::test] async fn img_relative_double_slash() { let src = r#"--- @@ -613,4 +681,4 @@ header: value1 = help: use `../assets/eip-712/eth_sign.png` instead "# ); -} \ No newline at end of file +} From e25c50c8f9b26a896234bba06640532081fcab74 Mon Sep 17 00:00:00 2001 From: asli Date: Wed, 19 Jun 2024 20:26:44 +0300 Subject: [PATCH 7/8] Add relative link suggestions for ercs --- .../src/lints/markdown/relative_links.rs | 15 +- .../tests/lint_markdown_relative_links.rs | 172 ++++++++++++++++++ 2 files changed, 181 insertions(+), 6 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index 3bfe6b56..87945794 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -32,8 +32,8 @@ where S: Debug + Display + AsRef, { fn lint<'a>(&self, slug: &'a str, ctx: &Context<'a, '_>) -> Result<(), Error> { - let re: Regex = Regex::new("(^/)|(://)").unwrap(); - let eip_re = Regex::new(r"^(https?:)?//eips\.ethereum\.org/(EIPS/eip-\d+|assets/.+)$").unwrap(); + let re = Regex::new("(^/)|(://)").unwrap(); + let eip_re = Regex::new(r"^(https?:)?//(?:eips|ercs)\.ethereum\.org/(?:EIPS|ERCS)/(?:eip|erc)-(\d+)|(assets/.+)$").unwrap(); let exceptions = RegexSet::new(&self.exceptions).map_err(Error::custom)?; @@ -47,11 +47,14 @@ where for Link { address, line_start } in links { let (suggestion, extra_help) = if let Some(caps) = eip_re.captures(&address) { - let relevant_part = &caps[2]; - if relevant_part.starts_with("EIPS/") { - (format!("./{}.md", relevant_part.trim_start_matches("EIPS/")), true) + if let Some(id_number) = caps.get(2) { + let suggestion = format!("./eip-{}.md", id_number.as_str()); + (suggestion, true) + } else if let Some(asset_path) = caps.get(3) { + let suggestion = format!("../{}", asset_path.as_str()); + (suggestion, true) } else { - (format!("../{}", relevant_part), true) + (address, false) } } else if address.contains("//creativecommons.org/publicdomain/zero/1.0/") { ("../LICENSE.md".to_string(), true) diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index 69c83511..67de7ac4 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -103,6 +103,40 @@ header: value1 ); } +#[tokio::test] +async fn inline_link_with_scheme_to_ercs_ethereum_org() { + let src = r#"--- +header: value1 +--- + +[hello](https://ercs.ethereum.org/ERCS/erc-1234) +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | [hello](https://ercs.ethereum.org/ERCS/erc-1234) + | + = help: use `./eip-1234.md` instead +"# + ); +} + #[tokio::test] async fn inline_link_with_scheme_to_creativecommons_copyright() { let src = r#"--- @@ -361,6 +395,42 @@ Hello [hi][hello]! ); } +#[tokio::test] +async fn reference_link_with_scheme_to_ercs_ethereum_org() { + let src = r#"--- +header: value1 +--- + +Hello [hi][hello]! + +[hello]: https://ercs.ethereum.org/ERCS/erc-1234 +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | Hello [hi][hello]! + | + = help: use `./eip-1234.md` instead +"# + ); +} + #[tokio::test] async fn inline_autolink() { let src = r#"--- @@ -496,6 +566,40 @@ header: value1 ); } +#[tokio::test] +async fn anchor_link_protocol_relative_to_ercs_ethereum_org() { + let src = r#"--- +header: value1 +--- + +example +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | example + | + = help: use `./eip-1234.md` instead +"# + ); +} + #[tokio::test] async fn anchor_link_relative_double_slash() { let src = r#"--- @@ -649,6 +753,40 @@ header: value1 ); } +#[tokio::test] +async fn img_protocol_relative_to_ercs_ethereum_org() { + let src = r#"--- +header: value1 +--- + + +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | + | + = help: use `../assets/erc-712/eth_sign.png` instead +"# + ); +} + #[tokio::test] async fn img_with_scheme_to_eips_ethereum_org() { let src = r#"--- @@ -682,3 +820,37 @@ header: value1 "# ); } + +#[tokio::test] +async fn img_with_scheme_to_ercs_ethereum_org() { + let src = r#"--- +header: value1 +--- + + +"#; + + let reports = Linter::>::default() + .clear_lints() + .deny( + "markdown-rel", + RelativeLinks { + exceptions: Vec::<&str>::new(), + }, + ) + .check_slice(None, src) + .run() + .await + .unwrap() + .into_inner(); + + assert_eq!( + reports, + r#"error[markdown-rel]: non-relative link or image + | +5 | + | + = help: use `../assets/erc-712/eth_sign.png` instead +"# + ); +} \ No newline at end of file From 0b42aa9cc12deec833f08f66f526ac84d47af474 Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Wed, 19 Jun 2024 14:16:28 -0400 Subject: [PATCH 8/8] cargo fmt --- eipw-lint/src/lints/markdown/relative_links.rs | 8 ++++++-- eipw-lint/tests/lint_markdown_relative_links.rs | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/eipw-lint/src/lints/markdown/relative_links.rs b/eipw-lint/src/lints/markdown/relative_links.rs index 87945794..73681c63 100644 --- a/eipw-lint/src/lints/markdown/relative_links.rs +++ b/eipw-lint/src/lints/markdown/relative_links.rs @@ -45,7 +45,11 @@ where .into_iter() .filter(|l| re.is_match(&l.address) && !exceptions.is_match(&l.address)); - for Link { address, line_start } in links { + for Link { + address, + line_start, + } in links + { let (suggestion, extra_help) = if let Some(caps) = eip_re.captures(&address) { if let Some(id_number) = caps.get(2) { let suggestion = format!("./eip-{}.md", id_number.as_str()); @@ -61,7 +65,7 @@ where } else { (address, false) }; - + let mut footer = vec![]; let suggestion_label = format!("use `{}` instead", suggestion); diff --git a/eipw-lint/tests/lint_markdown_relative_links.rs b/eipw-lint/tests/lint_markdown_relative_links.rs index 67de7ac4..a2b5ed00 100644 --- a/eipw-lint/tests/lint_markdown_relative_links.rs +++ b/eipw-lint/tests/lint_markdown_relative_links.rs @@ -656,7 +656,7 @@ header: value1 5 | copyright | = help: use `../LICENSE.md` instead -"# +"# ); } @@ -853,4 +853,4 @@ header: value1 = help: use `../assets/erc-712/eth_sign.png` instead "# ); -} \ No newline at end of file +}