kata-containers/tests/cmd/check-markdown/add.go
Chelsea Mafrica 8ad433d4ad tests: move markdown check tool to main repo
Move the tool as a dependency for static checks migration.

Fixes #8187

Signed-off-by: Bin Liu <bin@hyper.sh>
Signed-off-by: Chelsea Mafrica <chelsea.e.mafrica@intel.com>
Signed-off-by: Gabriela Cervantes <gabriela.cervantes.tellez@intel.com>
Signed-off-by: Ganesh Maharaj Mahalingam <ganesh.mahalingam@intel.com>
Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
Signed-off-by: Julio Montes <julio.montes@intel.com>
2023-11-28 11:13:55 -08:00

136 lines
2.9 KiB
Go

//
// Copyright (c) 2019 Intel Corporation
//
// SPDX-License-Identifier: Apache-2.0
//
package main
import (
"errors"
"fmt"
"path/filepath"
"strings"
"github.com/sirupsen/logrus"
)
// linkAddrToPath converts a link address into a path name.
func (d *Doc) linkAddrToPath(address string) (string, error) {
if address == "" {
return "", errors.New("need address")
}
dir := filepath.Dir(d.Name)
var file string
// An "absolute link path" like this has been specified:
//
// [Foo](/absolute-link.md)
if strings.HasPrefix(address, absoluteLinkPrefix) {
if !fileExists(docRoot) {
return "", fmt.Errorf("document root %q does not exist", docRoot)
}
file = filepath.Join(docRoot, address)
} else {
file = filepath.Join(dir, address)
}
return file, nil
}
// addHeading adds the specified heading to the document.
//
// Note that headings must be unique.
func (d *Doc) addHeading(heading Heading) error {
name := heading.Name
if name == "" {
return d.Errorf("heading name cannot be blank: %+v", heading)
}
if heading.LinkName == "" {
return d.Errorf("heading link name cannot be blank: %q (%+v)",
name, heading)
}
if heading.Level <= 0 {
return d.Errorf("heading level must be atleast 1: %q (%+v)",
name, heading)
}
if _, ok := d.Headings[name]; ok {
return d.Errorf("duplicate heading: %q (heading: %+v)",
name, heading)
}
// Potentially change the ID to handle strange characters
// supported in links by GitHub.
id, err := createHeadingID(heading.Name)
if err != nil {
return err
}
heading.LinkName = id
d.Logger.WithField("heading", fmt.Sprintf("%+v", heading)).Debug("adding heading")
d.Headings[name] = heading
return nil
}
// addLink potentially adds the specified link to the document.
//
// Note that links do not need to be unique: a document can contain
// multiple links with:
//
// - the same description and the same address.
// - the same description but with different addresses.
// - different descriptions but with the same address.
func (d *Doc) addLink(link Link) error {
addr := link.Address
if link.ResolvedPath != "" {
addr = link.ResolvedPath
}
if addr == "" {
return d.Errorf("link address cannot be blank: %+v", link)
}
if link.Type == unknownLink {
return d.Errorf("BUG: link type invalid: %+v", link)
}
// Not checked by default as magic "build status" / go report / godoc
// links don't have a description - they have a image only.
if strict && link.Description == "" {
return d.Errorf("link description cannot be blank: %q (%+v)",
addr, link)
}
fields := logrus.Fields{
"link": fmt.Sprintf("%+v", link),
}
links := d.Links[addr]
for _, l := range links {
if l.Type == link.Type {
d.Logger.WithFields(fields).Debug("not adding duplicate link")
return nil
}
}
d.Logger.WithFields(fields).Debug("adding link")
links = append(links, link)
d.Links[addr] = links
return nil
}