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 }