github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/sarif/sarif.go (about)

     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,omitempty"`
    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]interface{} `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  }