86 lines
3.0 KiB
Go
86 lines
3.0 KiB
Go
|
// Copyright 2019 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package analysis
|
||
|
|
||
|
import "go/token"
|
||
|
|
||
|
// A Diagnostic is a message associated with a source location or range.
|
||
|
//
|
||
|
// An Analyzer may return a variety of diagnostics; the optional Category,
|
||
|
// which should be a constant, may be used to classify them.
|
||
|
// It is primarily intended to make it easy to look up documentation.
|
||
|
//
|
||
|
// All Pos values are interpreted relative to Pass.Fset. If End is
|
||
|
// provided, the diagnostic is specified to apply to the range between
|
||
|
// Pos and End.
|
||
|
type Diagnostic struct {
|
||
|
Pos token.Pos
|
||
|
End token.Pos // optional
|
||
|
Category string // optional
|
||
|
Message string
|
||
|
|
||
|
// URL is the optional location of a web page that provides
|
||
|
// additional documentation for this diagnostic.
|
||
|
//
|
||
|
// If URL is empty but a Category is specified, then the
|
||
|
// Analysis driver should treat the URL as "#"+Category.
|
||
|
//
|
||
|
// The URL may be relative. If so, the base URL is that of the
|
||
|
// Analyzer that produced the diagnostic;
|
||
|
// see https://pkg.go.dev/net/url#URL.ResolveReference.
|
||
|
URL string
|
||
|
|
||
|
// SuggestedFixes is an optional list of fixes to address the
|
||
|
// problem described by the diagnostic. Each one represents
|
||
|
// an alternative strategy; at most one may be applied.
|
||
|
//
|
||
|
// Fixes for different diagnostics should be treated as
|
||
|
// independent changes to the same baseline file state,
|
||
|
// analogous to a set of git commits all with the same parent.
|
||
|
// Combining fixes requires resolving any conflicts that
|
||
|
// arise, analogous to a git merge.
|
||
|
// Any conflicts that remain may be dealt with, depending on
|
||
|
// the tool, by discarding fixes, consulting the user, or
|
||
|
// aborting the operation.
|
||
|
SuggestedFixes []SuggestedFix
|
||
|
|
||
|
// Related contains optional secondary positions and messages
|
||
|
// related to the primary diagnostic.
|
||
|
Related []RelatedInformation
|
||
|
}
|
||
|
|
||
|
// RelatedInformation contains information related to a diagnostic.
|
||
|
// For example, a diagnostic that flags duplicated declarations of a
|
||
|
// variable may include one RelatedInformation per existing
|
||
|
// declaration.
|
||
|
type RelatedInformation struct {
|
||
|
Pos token.Pos
|
||
|
End token.Pos // optional
|
||
|
Message string
|
||
|
}
|
||
|
|
||
|
// A SuggestedFix is a code change associated with a Diagnostic that a
|
||
|
// user can choose to apply to their code. Usually the SuggestedFix is
|
||
|
// meant to fix the issue flagged by the diagnostic.
|
||
|
//
|
||
|
// The TextEdits must not overlap, nor contain edits for other packages.
|
||
|
type SuggestedFix struct {
|
||
|
// A verb phrase describing the fix, to be shown to
|
||
|
// a user trying to decide whether to accept it.
|
||
|
//
|
||
|
// Example: "Remove the surplus argument"
|
||
|
Message string
|
||
|
TextEdits []TextEdit
|
||
|
}
|
||
|
|
||
|
// A TextEdit represents the replacement of the code between Pos and End with the new text.
|
||
|
// Each TextEdit should apply to a single file. End should not be earlier in the file than Pos.
|
||
|
type TextEdit struct {
|
||
|
// For a pure insertion, End can either be set to Pos or token.NoPos.
|
||
|
Pos token.Pos
|
||
|
End token.Pos
|
||
|
NewText []byte
|
||
|
}
|