diff --git a/README.md b/README.md index 5c8423a6..2f19d3d8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Codacy Badge](https://api.codacy.com/project/badge/Grade/bb5dc10c1d2645c0894fa6774300639b)](https://app.codacy.com/gh/tj-actions/auto-doc?utm_source=github.com\&utm_medium=referral\&utm_content=tj-actions/auto-doc\&utm_campaign=Badge_Grade_Settings) -![Coverage](https://img.shields.io/badge/Coverage-84.1%25-brightgreen) +![Coverage](https://img.shields.io/badge/Coverage-84.4%25-brightgreen) [![Go Reference](https://pkg.go.dev/badge/github.com/tj-actions/auto-doc.svg)](https://pkg.go.dev/github.com/tj-actions/auto-doc) [![Go Report Card](https://goreportcard.com/badge/github.com/tj-actions/auto-doc)](https://goreportcard.com/report/github.com/tj-actions/auto-doc) [![CI](https://github.com/tj-actions/auto-doc/workflows/CI/badge.svg)](https://github.com/tj-actions/auto-doc/actions?query=workflow%3ACI) diff --git a/cmd/root.go b/cmd/root.go index 94a5695e..735d10c0 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "gopkg.in/yaml.v3" "io/ioutil" + "regexp" "sort" "strconv" "strings" @@ -402,6 +403,11 @@ func wordWrap(s string, limit int) string { if strings.TrimSpace(s) == "" { return s } + // compile regular expressions for Markdown links and code blocks and code + linkRegex := regexp.MustCompile(`\[.*]\(.*\)`) + codeBlockRegex := regexp.MustCompile(`\` + "```" + `.*` + "```" + `\s*`) + codeRegex := regexp.MustCompile("`.*`") + // convert string to slice strSlice := strings.Fields(s) currentLimit := limit @@ -411,11 +417,12 @@ func wordWrap(s string, limit int) string { for len(strSlice) >= 1 { // convert slice/array back to string // but insert
at specified limit + // unless the current slice contains a Markdown link or code block or code if len(strSlice) < currentLimit { currentLimit = len(strSlice) result = result + strings.Join(strSlice[:currentLimit], " ") - } else if currentLimit == limit { + } else if currentLimit == limit && !linkRegex.MatchString(strings.Join(strSlice[:currentLimit], " ")) && !codeBlockRegex.MatchString(strings.Join(strSlice[:currentLimit], " ")) && !codeRegex.MatchString(strings.Join(strSlice[:currentLimit], " ")) { result = result + strings.Join(strSlice[:currentLimit], " ") + "
" } else { result = result + strings.Join(strSlice[:currentLimit], " ") @@ -430,7 +437,6 @@ func wordWrap(s string, limit int) string { if len(strSlice) < currentLimit { currentLimit = len(strSlice) } - } return result }