Sitelet https://web.archive.org/web/20220714153833/https://github.com/DavidAnson/markdownlint/issues/456
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

Add lint for a link reference without a corresponding link definition (or vice versa) #456

Closed
gibfahn opened this issue Nov 5, 2021 · 14 comments

Comments

@gibfahn
Copy link

@gibfahn gibfahn commented Nov 5, 2021 •

Often (especially when refactoring) links using the definition/reference style will get broken. It would be useful for markdownlint to catch this.

Two examples are:

Link Ref without Def

See [Docs][] for more info.

<!-- Should have a link definition below like:
[docs]: https://example.com
-->

Link Def without Ref

See [New Docs][] for more info.

<!-- None of the link definitions match the link reference above. -->
[docs]: https://example.com
@jasonsnell
Copy link

@jasonsnell jasonsnell commented Dec 16, 2021

Yes, agreed with this completely. A friend and I were working on a small standalone Markdown linter for writing purposes and this was actually our first feature! So strange that it's not in there.

@DavidAnson
Copy link
Owner

@DavidAnson DavidAnson commented Dec 16, 2021

@jasonsnell, I think I listen to your podcasts sometimes. :) Yes, there is a set of link-based rules in the queue I just haven't got to yet.

@nschonni
Copy link
Contributor

@nschonni nschonni commented Dec 16, 2021

I usually use https://www.npmjs.com/package/markdown-link-check since when you start to link check outside of the same document, you need to have a concept of a layout and replacements

@gibfahn
Copy link
Author

@gibfahn gibfahn commented Dec 24, 2021 •

Just tried markdown-link-check with the snippets from above:

echo 'See [Docs][] for more info.

<!-- Should have a link definition below like:
[docs]: https://example.com
-->' > ref_without_def.md
docker run -v ${PWD}:/tmp:ro --rm -i ghcr.io/tcort/markdown-link-check:stable /tmp/ref_without_def.md

echo 'See [New Docs][] for more info.

<!-- None of the link definitions match the link reference above. -->
[docs]: https://example.com' > def_without_ref.md
docker run -v ${PWD}:/tmp:ro --rm -i ghcr.io/tcort/markdown-link-check:stable /tmp/def_without_ref.md

Output (0 exit code):

FILE: /tmp/ref_without_def.md
  No hyperlinks found!

  0 links checked.

FILE: /tmp/def_without_ref.md
  No hyperlinks found!

  0 links checked.

so doesn't actually seem like it catches this case, possibly because it considers having extra refs/defs to be an okay thing to do (whereas for me it's nearly always copy-pasta, or someone forgetting how the defs/refs actually work.

@nschonni
Copy link
Contributor

@nschonni nschonni commented Dec 24, 2021

Right, I missread this, but it looks like a duplicate of #144

@DavidAnson
Copy link
Owner

@DavidAnson DavidAnson commented Dec 24, 2021

Agree, I'll probably try to add this for the next (not pending) release.

@nschonni
Copy link
Contributor

@nschonni nschonni commented Dec 24, 2021

Here is the remark-lint version of this rule https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-undefined-references to see if they have any edge case code that might be needed

@jasonsnell
Copy link

@jasonsnell jasonsnell commented Dec 24, 2021

@gibfahn
Copy link
Author

@gibfahn gibfahn commented Dec 27, 2021

Right, I missread this, but it looks like a duplicate of #144

Ahh, good point, failed to find that in the issue search.

@DavidAnson
Copy link
Owner

@DavidAnson DavidAnson commented Jun 2, 2022

Two new rules will be available in the next release of the library:

They will report errors for:

  • Link and image references missing a label
  • Link/image reference definitions that are unused
  • Link/image reference definitions that are duplicated

The latter two scenarios can be automatically fixed by the library (by deleting the unneeded reference definition).

/cc @jasonsnell

@jasonsnell
Copy link

@jasonsnell jasonsnell commented Jun 22, 2022

thank you @DavidAnson ! My friend might have invented Markdown? ;-)

@DavidAnson
Copy link
Owner

@DavidAnson DavidAnson commented Jun 22, 2022

@jasonsnell Hopefully the idea of a Markdown linter does not offend him too much.

@jasonsnell
Copy link

@jasonsnell jasonsnell commented Jun 22, 2022

He's working on a little one of his own for person writing use, much less comprehensive than this one. I think he likes the idea! But I don't want to speak for him.

@DavidAnson
Copy link
Owner

@DavidAnson DavidAnson commented Jun 22, 2022

@jasonsnell Cool. If there's anything ya'll think I should be doing here to make it more compelling (other than adding more rules), please let me know.

For example: editor integration. I happen to think the VS Code integration is pretty good (because I wrote it), but maybe you have a different favorite editor.

https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants