src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

sarif.go (4258B)


      1 package sarif
      2 
      3 const Version = "2.1.0"
      4 const Schema = "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json"
      5 
      6 type Log struct {
      7 	Version string `json:"version"`
      8 	Schema  string `json:"$schema"`
      9 	Runs    []Run  `json:"runs"`
     10 }
     11 
     12 type Run struct {
     13 	Tool        Tool         `json:"tool"`
     14 	Results     []Result     `json:"results,omitempty"`
     15 	Invocations []Invocation `json:"invocations,omitempty"`
     16 	Artifacts   []Artifact   `json:"artifacts,omitempty"`
     17 }
     18 
     19 type Artifact struct {
     20 	Location       ArtifactLocation `json:"location"`
     21 	Length         int              `json:"length"`
     22 	SourceLanguage string           `json:"sourceLanguage"`
     23 	Roles          []string         `json:"roles"`
     24 	Encoding       string           `json:"encoding"`
     25 }
     26 
     27 const (
     28 	AnalysisTarget = "analysisTarget"
     29 	UTF8           = "UTF-8"
     30 	Fail           = "fail"
     31 	Warning        = "warning"
     32 	Error          = "error"
     33 	Note           = "note"
     34 	None           = "none"
     35 )
     36 
     37 type Hash struct {
     38 	Sha256 string `json:"sha-256"`
     39 }
     40 
     41 type Tool struct {
     42 	Driver ToolComponent `json:"driver"`
     43 }
     44 
     45 type Invocation struct {
     46 	CommandLine         string           `json:"commandLine,omitempty"`
     47 	Arguments           []string         `json:"arguments,omitempty"`
     48 	WorkingDirectory    ArtifactLocation `json:"workingDirectory,omitzero"`
     49 	ExecutionSuccessful bool             `json:"executionSuccessful"`
     50 }
     51 
     52 type ToolComponent struct {
     53 	Name            string                `json:"name,omitempty"`
     54 	Version         string                `json:"version,omitempty"`
     55 	SemanticVersion string                `json:"semanticVersion,omitempty"`
     56 	InformationURI  string                `json:"informationUri,omitempty"`
     57 	Rules           []ReportingDescriptor `json:"rules,omitempty"`
     58 }
     59 
     60 type ReportingDescriptor struct {
     61 	ID               string  `json:"id"`
     62 	ShortDescription Message `json:"shortDescription"`
     63 	// FullDescription  Message `json:"fullDescription"`
     64 	Help                 Message                `json:"help"`
     65 	HelpURI              string                 `json:"helpUri,omitempty"`
     66 	DefaultConfiguration ReportingConfiguration `json:"defaultConfiguration"`
     67 }
     68 
     69 type ReportingConfiguration struct {
     70 	Enabled    bool           `json:"enabled"`
     71 	Level      string         `json:"level,omitempty"`
     72 	Parameters map[string]any `json:"parameters,omitempty"`
     73 }
     74 
     75 type Result struct {
     76 	RuleID string `json:"ruleId"`
     77 	// RuleIndex        int        `json:"ruleIndex"`
     78 	Kind             string        `json:"kind"`
     79 	Level            string        `json:"level,omitempty"`
     80 	Message          Message       `json:"message"`
     81 	Locations        []Location    `json:"locations,omitempty"`
     82 	RelatedLocations []Location    `json:"relatedLocations,omitempty"`
     83 	Fixes            []Fix         `json:"fixes,omitempty"`
     84 	Suppressions     []Suppression `json:"suppressions"`
     85 }
     86 
     87 type Suppression struct {
     88 	Kind          string `json:"kind"`
     89 	Justification string `json:"justification"`
     90 }
     91 
     92 type Fix struct {
     93 	Description     Message          `json:"description"`
     94 	ArtifactChanges []ArtifactChange `json:"artifactChanges"`
     95 }
     96 
     97 type ArtifactChange struct {
     98 	ArtifactLocation ArtifactLocation `json:"artifactLocation"`
     99 	Replacements     []Replacement    `json:"replacements"`
    100 }
    101 
    102 type Replacement struct {
    103 	DeletedRegion   Region          `json:"deletedRegion"`
    104 	InsertedContent ArtifactContent `json:"insertedContent"`
    105 }
    106 
    107 type ArtifactContent struct {
    108 	Text string `json:"text"`
    109 }
    110 
    111 type Message struct {
    112 	Text     string `json:"text,omitempty"`
    113 	Markdown string `json:"markdown,omitempty"`
    114 }
    115 
    116 type Location struct {
    117 	ID               int              `json:"id,omitempty"`
    118 	Message          *Message         `json:"message,omitempty"`
    119 	PhysicalLocation PhysicalLocation `json:"physicalLocation"`
    120 }
    121 
    122 type PhysicalLocation struct {
    123 	ArtifactLocation ArtifactLocation `json:"artifactLocation"`
    124 	Region           Region           `json:"region"`
    125 }
    126 
    127 type ArtifactLocation struct {
    128 	URI       string `json:"uri,omitempty"`
    129 	Index     int    `json:"index,omitempty"`
    130 	URIBaseID string `json:"uriBaseId,omitempty"`
    131 }
    132 
    133 type Region struct {
    134 	StartLine   int `json:"startLine"`
    135 	StartColumn int `json:"startColumn"`
    136 	EndLine     int `json:"endLine,omitempty"`
    137 	EndColumn   int `json:"endColumn,omitempty"`
    138 }