mdlinks

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 2, 2022 License: MIT Imports: 10 Imported by: 0

README

This repository provides Go package, command-line tool, and a GitHub Action that can verify cross-document links in a collection of markdown files.

Code scans markdown files for domain-less links and checks if referenced files exist. For example, if a file “doc1.md” has a link with “../img.png” target, this tool will check whether the “img.png” file exists in a “doc1.md” file parent directory.

If a link references an existing markdown document and has a fragment part, this tool checks that such a link points to an existing markdown header, using the same rules of unique ID generating as GitHub markdown rendering.

For example, use the #table-of-contents link fragment to reference the “Table of Contents” header.

Command-line tool

Install it like:

go install github.com/artyom/mdlinks/cmd/mdlinks@latest

GitHub Action

When using default settings (scan the repository root directory, look for *.md files), you can use this action like this:

on:
  push:
  pull_request:

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: artyom/mdlinks@v0

You can customize what directory to scan and which files to match:

- uses: artyom/mdlinks@v0
  with:
    dir: 'docs'
    glob: '*.markdown'

Documentation

Overview

Package mdlinks provides functions to verify cross links in a set of markdown files.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckFS

func CheckFS(fsys fs.FS, pat string) error

CheckFS walks file system fsys looking for files with their base names matching pattern pat. It parses such files as markdown, looks for local urls (urls that only specify paths), and reports if it find any urls that point to non-existing files.

If returned error is a *BrokenLinksError, it describes found files with broken links.

Types

type BrokenLink struct {
	File string // file path, relative to directory/filesystem scanned; uses '/' as a separator
	Link LinkInfo
	// contains filtered or unexported fields
}

BrokenLink describes broken markdown link and the file it belongs to.

func (BrokenLink) Reason

func (b BrokenLink) Reason() string

func (BrokenLink) String

func (b BrokenLink) String() string

type BrokenLinksError

type BrokenLinksError struct {
	Links []BrokenLink
}

BrokenLinksError is an error type returned by this package functions to report found broken links.

Usage example:

err := mdlinks.CheckFS(os.DirFS(dir), "*.md")
var e *mdlinks.BrokenLinksError
if errors.As(err, &e) {
	for _, link := range e.Links {
		log.Println(link)
	}
}

func (*BrokenLinksError) Error

func (e *BrokenLinksError) Error() string

type LinkInfo

type LinkInfo struct {
	Raw      string // as seen in the source, usually “some/path#fragment”
	Path     string // only the path part of the link
	Fragment string // only the fragment part of the link, without '#'
}

LinkInfo describes markdown link

Directories

Path Synopsis
cmd
mdlinks command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL