core

package
v1.4.3 Latest Latest
Warning

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

Go to latest
Published: Jun 21, 2019 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AlertLevels = []string{"suggestion", "warning", "error"}

AlertLevels holds the possible values for "level" in an external rule.

View Source
var CommentsByNormedExt = map[string]map[string]string{
	".c": {
		"inline":     `(//.+)|(/\*.+\*/)`,
		"blockStart": `(/\*.*)`,
		"blockEnd":   `(.*\*/)`,
	},
	".css": {
		"inline":     `(/\*.+\*/)`,
		"blockStart": `(/\*.*)`,
		"blockEnd":   `(.*\*/)`,
	},
	".rs": {
		"inline":     `(//.+)`,
		"blockStart": `$^`,
		"blockEnd":   `$^`,
	},
	".r": {
		"inline":     `(#.+)`,
		"blockStart": `$^`,
		"blockEnd":   `$^`,
	},
	".py": {
		"inline":     `(#.*)|('{3}.+'{3})|("{3}.+"{3})`,
		"blockStart": `(?m)^((?:\s{4,})?[r]?["']{3}.*)$`,
		"blockEnd":   `(.*["']{3})`,
	},
	".php": {
		"inline":     `(//.+)|(/\*.+\*/)|(#.+)`,
		"blockStart": `(/\*.*)`,
		"blockEnd":   `(.*\*/)`,
	},
	".lua": {
		"inline":     `(-- .+)`,
		"blockStart": `(-{2,3}\[\[.*)`,
		"blockEnd":   `(.*\]\])`,
	},
	".hs": {
		"inline":     `(-- .+)`,
		"blockStart": `(\{-.*)`,
		"blockEnd":   `(.*-\})`,
	},
	".rb": {
		"inline":     `(#.+)`,
		"blockStart": `(^=begin)`,
		"blockEnd":   `(^=end)`,
	},
}

CommentsByNormedExt determines what parts of a file we should lint -- e.g., we only want to lint // or /* comments in a C++ file. Multiple syntaxes are mapped to a single extension (e.g., .java -> .c) because many languages use the same comment delimiters.

View Source
var ExeDir string

ExeDir is our starting location.

View Source
var FormatByExtension = map[string][]string{
	`\.(?:[rc]?py[3w]?|[Ss][Cc]onstruct)$`:        {".py", "code"},
	`\.(?:adoc|asciidoc|asc)$`:                    {".adoc", "markup"},
	`\.(?:cpp|cc|c|cp|cxx|c\+\+|h|hpp|h\+\+)$`:    {".c", "code"},
	`\.(?:cs|csx)$`:                               {".c", "code"},
	`\.(?:css)$`:                                  {".css", "code"},
	`\.(?:go)$`:                                   {".c", "code"},
	`\.(?:html|htm|shtml|xhtml)$`:                 {".html", "markup"},
	`\.(?:rb|Gemfile|Rakefile|Brewfile|gemspec)$`: {".rb", "code"},
	`\.(?:java|bsh)$`:                             {".c", "code"},
	`\.(?:js)$`:                                   {".c", "code"},
	`\.(?:lua)$`:                                  {".lua", "code"},
	`\.(?:md|mdown|markdown|markdn)$`:             {".md", "markup"},
	`\.(?:php)$`:                                  {".php", "code"},
	`\.(?:pl|pm|pod)$`:                            {".r", "code"},
	`\.(?:r|R)$`:                                  {".r", "code"},
	`\.(?:rs)$`:                                   {".rs", "code"},
	`\.(?:rst|rest)$`:                             {".rst", "markup"},
	`\.(?:swift)$`:                                {".c", "code"},
	`\.(?:txt)$`:                                  {".txt", "text"},
	`\.(?:sass|less)$`:                            {".c", "code"},
	`\.(?:scala|sbt)$`:                            {".c", "code"},
	`\.(?:hs)$`:                                   {".hs", "code"},
}

FormatByExtension associates a file extension with its "normed" extension and its format (markup, code or text).

View Source
var LevelToInt = map[string]int{
	"suggestion": 0,
	"warning":    1,
	"error":      2,
}

LevelToInt allows us to easily compare levels in lint.go.

View Source
var SentenceTokenizer = tokenize.NewPunktSentenceTokenizer()

SentenceTokenizer splits text into sentences.

Tagger tags a sentence.

We wait to initilize it until we need it since it's slow (~1s) and we may not need it.

View Source
var WordTokenizer = tokenize.NewRegexpTokenizer(
	`[\p{L}[\p{N}]+(?:\.\w{2,4}\b)|(?:[A-Z]\.){2,}|[\p{L}[\p{N}]+'[\p{L}[\p{N}]+|[\p{L}[\p{N}@]+`, false, true)

WordTokenizer splits text into words.

Functions

func AllStringsInSlice

func AllStringsInSlice(strings []string, slice []string) bool

AllStringsInSlice determines if `slice` contains the `strings`.

func CheckAndClose

func CheckAndClose(file *os.File) bool

CheckAndClose closes `file` and prints any errors to stdout. A return value of true => no error.

func CheckError

func CheckError(err error) bool

CheckError prints any errors to stdout. A return value of true => no error.

func CheckPOS

func CheckPOS(loc []int, expected, text string) bool

CheckPOS determines if a match (as found by an extension point) also matches the expected part-of-speech in text.

func ContainsAny

func ContainsAny(text string, slice []string) bool

ContainsAny determines if `text` contains any string in `slice`.

func DeterminePath

func DeterminePath(configPath string, keyPath string) string

DeterminePath decides if `keyPath` is relative or absolute.

func DumpConfig

func DumpConfig(config *Config) string

DumpConfig returns Vale's configuration in JSON format.

func FileExists

func FileExists(filename string) bool

FileExists determines if the path given by `filename` exists.

func FormatAlert added in v1.4.0

func FormatAlert(a *Alert, level int, name string)

FormatAlert ensures that all required fields have data.

func FormatFromExt

func FormatFromExt(path string, mapping map[string]string) (string, string)

FormatFromExt takes a file extension and returns its [normExt, format] list, if supported.

func FormatMessage

func FormatMessage(msg string, subs ...string) string

FormatMessage inserts `subs` into `msg`.

func HasAnyPrefix

func HasAnyPrefix(text string, slice []string) bool

HasAnyPrefix determines if `text` has any prefix contained in `slice`.

func InRange

func InRange(n int, r []int) bool

InRange determines if the range r contains the integer n.

func Indent

func Indent(text, indent string) string

Indent adds padding to every line of `text`.

func IsDir

func IsDir(filename string) bool

IsDir determines if the path given by `filename` is a directory.

func IsLetter

func IsLetter(s string) bool

IsLetter returns `true` if s contains all letter characters and false if not.

func JaroWinkler

func JaroWinkler(ctx, sub string) (int, string)

JaroWinkler searches `ctx` line-by-line for a JaroWinkler distance score greater than a particular threshold.

func LooksLikeStdin

func LooksLikeStdin(s string) bool

LooksLikeStdin determines if s appears to be a string.

func Max

func Max(a, b int) int

Max returns the max of `a` and `b`.

func Min

func Min(a, b int) int

Min returns the min of `a` and `b`.

func PrepText

func PrepText(txt string) string

PrepText prepares text for our check functions.

func SlicesEqual

func SlicesEqual(a, b []string) bool

SlicesEqual determines if the slices a and b are equal.

func SplitLines

func SplitLines(data []byte, atEOF bool) (adv int, token []byte, err error)

SplitLines splits on CRLF, CR not followed by LF, and LF.

func Stat

func Stat() bool

Stat checks if we have anything waiting in stdin.

func StringInSlice

func StringInSlice(a string, slice []string) bool

StringInSlice determines if `slice` contains the string `a`.

func StringsToInterface

func StringsToInterface(strings []string) []interface{}

StringsToInterface converts a slice of strings to an interface.

func Substitute

func Substitute(src, sub string, char rune) (string, bool)

Substitute replaces the substring `sub` with a string of asterisks.

func TextToWords

func TextToWords(text string) []string

TextToWords convert raw text into a slice of words.

func Which

func Which(cmds []string) string

Which checks for the existence of any command in `cmds`.

Types

type Alert

type Alert struct {
	Check       string // the name of the check
	Description string // why `Message` is meaningful
	Line        int    // the source line
	Link        string // reference material
	Message     string // the output message
	Severity    string // 'suggestion', 'warning', or 'error'
	Span        []int  // the [begin, end] location within a line
	Hide        bool   // should we hide this alert?
	Match       string // the actual matched text
}

An Alert represents a potential error in prose.

type ByName

type ByName []*File

ByName sorts Files by their path.

func (ByName) Len

func (a ByName) Len() int

func (ByName) Less

func (a ByName) Less(i, j int) bool

func (ByName) Swap

func (a ByName) Swap(i, j int)

type ByPosition

type ByPosition []Alert

ByPosition sorts Alerts by line and column.

func (ByPosition) Len

func (a ByPosition) Len() int

func (ByPosition) Less

func (a ByPosition) Less(i, j int) bool

func (ByPosition) Swap

func (a ByPosition) Swap(i, j int)

type Config

type Config struct {
	// General configuration
	Checks        []string                   // All checks to load
	GBaseStyles   []string                   // Global base style
	GChecks       map[string]bool            // Global checks
	IgnoredScopes []string                   // A list of HTML tags to ignore
	SkippedScopes []string                   // A list of HTML blocks to ignore
	BlockIgnores  map[string][]string        // A list of blocks to ignore
	TokenIgnores  map[string][]string        // A list of tokens to ignore
	MinAlertLevel int                        // Lowest alert level to display
	RuleToLevel   map[string]string          // Single-rule level changes
	SBaseStyles   map[string][]string        // Syntax-specific base styles
	SChecks       map[string]map[string]bool // Syntax-specific checks
	StylesPath    string                     // Directory with Rule.yml files
	WordTemplate  string                     // The template used in YAML -> regexp list conversions
	Parsers       map[string]string          // A map of syntax -> commands
	Formats       map[string]string          // A map of unknown -> known formats
	Path          string                     // The location of the config file

	SecToPat map[string]glob.Glob

	// Command-line configuration
	Output    string // (optional) output style ("line" or "CLI")
	Wrap      bool   // (optional) wrap output when CLI style
	NoExit    bool   // (optional) don't return a nonzero exit code on lint errors
	Sorted    bool   // (optional) sort files by their name for output
	Normalize bool   // (optional) replace each path separator with a slash ('/')
	Simple    bool   // (optional) lint all files line-by-line
	InExt     string // (optional) extension to associate with stdin
	Relative  bool   // (optional) return relative paths
}

Config holds Vale's configuration, both from the CLI and its config file.

func LoadConfig

func LoadConfig(cfg *Config, upath string) (*Config, error)

LoadConfig reads the .vale/_vale file.

func NewConfig

func NewConfig() *Config

NewConfig initializes a Config.

type File

type File struct {
	Alerts     []Alert           // all alerts associated with this file
	BaseStyles []string          // base style assigned in .vale
	Checks     map[string]bool   // syntax-specific checks assigned in .vale
	ChkToCtx   map[string]string // maps a temporary context to a particular check
	Comments   map[string]bool   // comment control statements
	Content    string            // the raw file contents
	Counts     map[string]int    // word counts
	Format     string            // 'code', 'markup' or 'prose'
	Lines      []string          // the File's Content split into lines
	Command    string            // a user-provided parsing CLI command
	NormedExt  string            // the normalized extension (see util/format.go)
	Path       string            // the full path
	RealExt    string            // actual file extension
	Scanner    *bufio.Scanner    // used by lintXXX functions
	Sequences  []string          // tracks various info (e.g., defined abbreviations)
	Simple     bool
	Summary    bytes.Buffer // holds content to be included in summarization checks
	// contains filtered or unexported fields
}

A File represents a linted text file.

func NewFile

func NewFile(src string, config *Config) *File

NewFile initilizes a File.

func (*File) AddAlert

func (f *File) AddAlert(a Alert, ctx, txt string, lines, pad int)

AddAlert calculates the in-text location of an Alert and adds it to a File.

func (*File) FindLoc

func (f *File) FindLoc(ctx, s string, pad, count int, loc []int) (int, []int)

FindLoc calculates the line and span of an Alert.

func (*File) QueryComments

func (f *File) QueryComments(check string) bool

QueryComments checks if there has been an in-text comment for this check.

func (*File) ResetComments

func (f *File) ResetComments()

ResetComments resets the state of all checks back to active.

func (*File) SortedAlerts

func (f *File) SortedAlerts() []Alert

SortedAlerts returns all of f's alerts sorted by line and column.

func (*File) UpdateComments

func (f *File) UpdateComments(comment string)

UpdateComments sets a new status based on comment.

type Glob

type Glob struct {
	Negated bool
	Pattern glob.Glob
}

Glob represents a glob pattern passed via `--glob`.

func NewGlob

func NewGlob(pat string) Glob

NewGlob creates a Glob from the string pat.

func (Glob) Match

func (g Glob) Match(query string) bool

Match returns whether or not the Glob g matches the string query.

type Plugin added in v1.4.0

type Plugin struct {
	Scope string
	Level string
	Rule  func(string, *File) []Alert
}

A Plugin provides a means of extending Vale.

type Selector

type Selector struct {
	Value string // e.g., text.comment.line.py
}

A Selector represents a named section of text.

func (Selector) Contains

func (s Selector) Contains(sel Selector) bool

Contains determines if all if sel's sections are in s.

func (Selector) Equal

func (s Selector) Equal(sel Selector) bool

Equal determines if sel == s.

func (Selector) Has

func (s Selector) Has(scope string) bool

Has determines if s has a part equal to scope.

func (Selector) Sections

func (s Selector) Sections() []string

Sections splits a Selector into its parts -- e.g., text.comment.line.py -> []string{"text", "comment", "line", "py"}.

Jump to

Keyboard shortcuts

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