diff --git a/src/ReleaseHistory.md b/src/ReleaseHistory.md
index 8e23afe07..e2e6fd562 100644
--- a/src/ReleaseHistory.md
+++ b/src/ReleaseHistory.md
@@ -16,33 +16,33 @@
## **v1.5.21-beta** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.21-beta) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.21-beta)
* Persist mime-type for files in SarifLogger
* Remove stack persistence for configuration notification exceptions
-* Reclassify 'could not parse target' as a configuration notification
+* Reclassify `could not parse target` as a configuration notification
* Fix diffing visitor to diff using value type semantics rather than by reference equality
## **v1.5.22-beta** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.22-beta) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.22-beta)
-* Add suppressionStates enum (with a single current value, indicating 'suppressedInSource')
-* Add 'id' and 'correlationId' as arguments to ResultLogJsonWriter.Initialize. Log 'id' is populated with a generated guid by default.
-* Add 'sarifLoggerVersion' that identifies the SDK logger version used to produce a log file.
-* Provide serialization of arbitrary JSON content to 'properties' members.
-* Move 'tags' into properties (but provide top-level Tags member for setting/retrieving this data)
-* Add annotatedCodeLocation.kind enum (with values such as 'branch', 'declaration', et al.)
+* Add suppressionStates enum (with a single current value, indicating `suppressedInSource`)
+* Add `id` and `correlationId` as arguments to ResultLogJsonWriter.Initialize. Log `id` is populated with a generated guid by default.
+* Add `sarifLoggerVersion` that identifies the SDK logger version used to produce a log file.
+* Provide serialization of arbitrary JSON content to `properties` members.
+* Move `tags` into properties (but provide top-level Tags member for setting/retrieving this data)
+* Add annotatedCodeLocation.kind enum (with values such as `branch`, `declaration`, et al.)
* Update all converters to Sarif beta.5
-* Add optional 'id' to each result, to allow correlation with external data, annotations, work items, etc.
+* Add optional `id` to each result, to allow correlation with external data, annotations, work items, etc.
* Add flag to configure file hash computation to FileData.Create helper
-* Add 'uriBaseId' conceptual base URI to all format URI properties (to allow all URIs to be relative)
-* Add 'analysisTargetUri' to run object, for cases where a single target is associated with a run
-* Add 'threadId' to notification, annotatedCodeLocation and stackFrame.
+* Add `uriBaseId` conceptual base URI to all format URI properties (to allow all URIs to be relative)
+* Add `analysisTargetUri` to run object, for cases where a single target is associated with a run
+* Add `threadId` to notification, annotatedCodeLocation and stackFrame.
* Rework files and logicalLocations dictionary to store discrete items (with parent keys), not arrays
* Add logicalLocationKey and fullyQualifiedLogicalLocationName to annotatedCodeLocation
-* Add 'id' and 'essential' properties to annotatedCodeLocation
-* Rename 'toolFingerprint' to 'toolFingerprintContribution'
-* Add baselineId. Rename 'correlationId' to 'automationId'
-* Add 'physicalLocation' property to notification
+* Add `id` and `essential` properties to annotatedCodeLocation
+* Rename `toolFingerprint` to `toolFingerprintContribution`
+* Add baselineId. Rename `correlationId` to `automationId`
+* Add `physicalLocation` property to notification
## **v1.5.23-beta** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.23-beta) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.23-beta)
-* Rename 'codeSnippet' to 'snippet'
-* Remove requirement to specify 'description' on code fixes
-* Add 'architecture' back to 'run' object
+* Rename `codeSnippet` to `snippet`
+* Remove requirement to specify `description` on code fixes
+* Add `architecture` back to `run` object
## **v1.5.24-beta** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.24-beta) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.24-beta)
* Permit annotatedCodeLocation.id to be a numeric value (in addition to a string)
@@ -61,16 +61,16 @@
* Drop .NET framework dependency to 4.5 (from 4.5.1)
## **v1.5.27** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.27) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.27)
-* Ship checked in CommandLine.dll in order to allow this 'beta' NuGet component to ship in Driver non-beta release
+* Ship checked in CommandLine.dll in order to allow this `beta` NuGet component to ship in Driver non-beta release
## **v1.5.28** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.28) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.28)
* API BREAKING change: rename PropertyBagDictionary to PropertiesDictionary
-* Add 'functionReturn' to annotatedCodeLocation.kind
-* Remove 'source', 'sink' and 'sanitizer' from annotatedCodeLocation.kind
-* Add 'taint' enum to annotatedCodeLocation with values 'source', 'sink' and 'sanitizer'
-* Add 'parameters' and 'variables' members to annotatedCodeLocation
-* Rename annotatedCodeLocation.callee member to 'target'
-* Rename annotatedCodeLocation.calleeKey member to 'targetKey'
+* Add `functionReturn` to annotatedCodeLocation.kind
+* Remove `source`, `sink` and `sanitizer` from annotatedCodeLocation.kind
+* Add `taint` enum to annotatedCodeLocation with values `source`, `sink` and `sanitizer`
+* Add `parameters` and `variables` members to annotatedCodeLocation
+* Rename annotatedCodeLocation.callee member to `target`
+* Rename annotatedCodeLocation.calleeKey member to `targetKey`
## **v1.5.29** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.29) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.29)
@@ -86,21 +86,21 @@
## **v1.5.32** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.32) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.32)
-* Add 'annotations' member to annotatedCodeLocation object.
-* Rename annotatedCodeLocation 'variables' member to 'state'
-* Rename annotatedCodeLocation 'parameters' member to 'values'
+* Add `annotations` member to annotatedCodeLocation object.
+* Rename annotatedCodeLocation `variables` member to `state`
+* Rename annotatedCodeLocation `parameters` member to `values`
## **v1.5.33** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.33) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.33)
-* Resolve crash generating 'not applicable' messages
+* Resolve crash generating `not applicable` messages
## **v1.5.34** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.34) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.34)
-* Update schema for 'annotations' object required properties
+* Update schema for `annotations` object required properties
## **v1.5.35** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.35) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.35)
-* Add 'configuration' member to rule objects
+* Add `configuration` member to rule objects
## **v1.5.36** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.36) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.36)
@@ -148,7 +148,7 @@
## **v1.5.47** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.5.47) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.5.47)
* Enable converter plugins
- * Adjust RuntimeConditions enum so that 'command line parse' error is 0x1.
+ * Adjust RuntimeConditions enum so that `command line parse` error is 0x1.
## **v1.6.0** [Driver](https://www.nuget.org/packages/Sarif.Driver/1.6.0) | [SDK](https://www.nuget.org/packages/Sarif.Sdk/1.6.0)
* Enable persistence of base64-encoded file contents via SarifLogger.
@@ -204,65 +204,65 @@
## **v2.0.0-csd.2.beta.2018-10-10** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2018-10-10) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2018-10-10) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2018-10-10)) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2018-10-10))
* FEATURE:Add --sarif-version command to driver (to transform SARIF output to v1 format)
* BUGFIX: Drop erroneous persistence of redaction tokens as files objects.
-* API NON-BREAKING: Add 'result.occurrenceCount' (denotes # of occurrences of an identical results within an analysisRun)
-* API NON-BREAKING: Add 'run.externalFiles' object to schema. Sync generally to OASIS TC schema.
-* API BREAKING: 'originalUriBaseIds' is now a dictionary of file locations, not strings.
-* API BREAKING: Suffix 'invocation.startTime', 'invocation.endTime', 'file.lastModifiedTime' and 'notification.time' with Utc ('startTimeUtc', 'endTimeUtc', etc.).
-* API BREAKING: 'threadflowLocation.timestamp' renamed to 'executionTimeUtc'.
-* API BREAKING: 'versionControlDetails.timestamp' renamed to 'asOfTimeUtc'.
-* API BREAKING: 'versionControlDetails.uri' renamed to 'repositoryUri'.
-* API BREAKING: 'versionControlDetails.tag' renamed to 'revisionTag'
-* API BREAKING: 'exception.message' type converted from string to message object.
-* API BREAKING: 'file.hashes' is now a string/string dictionary, not an array of 'hash' objects (the type for which is deleted)
-* API BREAKING: 'run.instanceGuid', 'run.correlationGuid', 'run.logicalId', 'run.description' combined into new 'runAutomationDetails' object instance defined at 'run.id'.
-* API BREAKING: 'run.automationLogicalId' subsumed by 'run.aggregateIds', an array of 'runAutomationDetails' objects.
-* API BREAKING: Remove 'threadFlowLocation.step'
-* API BREAKING: 'invocation.workingDirectory' is now a FileLocation object (and not a URI expressed as a string)
+* API NON-BREAKING: Add `result.occurrenceCount` (denotes # of occurrences of an identical results within an analysisRun)
+* API NON-BREAKING: Add `run.externalFiles` object to schema. Sync generally to OASIS TC schema.
+* API BREAKING: `originalUriBaseIds` is now a dictionary of file locations, not strings.
+* API BREAKING: Suffix `invocation.startTime`, `invocation.endTime`, `file.lastModifiedTime` and `notification.time` with Utc (`startTimeUtc`, `endTimeUtc`, etc.).
+* API BREAKING: `threadflowLocation.timestamp` renamed to `executionTimeUtc`.
+* API BREAKING: `versionControlDetails.timestamp` renamed to `asOfTimeUtc`.
+* API BREAKING: `versionControlDetails.uri` renamed to `repositoryUri`.
+* API BREAKING: `versionControlDetails.tag` renamed to `revisionTag`
+* API BREAKING: `exception.message` type converted from string to message object.
+* API BREAKING: `file.hashes` is now a string/string dictionary, not an array of `hash` objects (the type for which is deleted)
+* API BREAKING: `run.instanceGuid`, `run.correlationGuid`, `run.logicalId`, `run.description` combined into new `runAutomationDetails` object instance defined at `run.id`.
+* API BREAKING: `run.automationLogicalId` subsumed by `run.aggregateIds`, an array of `runAutomationDetails` objects.
+* API BREAKING: Remove `threadFlowLocation.step`
+* API BREAKING: `invocation.workingDirectory` is now a FileLocation object (and not a URI expressed as a string)
## **v2.0.0-csd.2.beta.2018-10-10.1** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2018-10-10.1) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2018-10-10.1) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2018-10-10.1) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2018-10-10.1)
* BUGFIX: Persist region information associated with analysis target
## **v2.0.0-csd.2.beta.2018-10-10.2** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2018-10-10.2) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2018-10-10.2) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2018-10-10.2) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2018-10-10.2)
-* BUGFIX: Don't emit v2 analysisTarget if there is no v1 resultFile.
+* BUGFIX: Don`t emit v2 analysisTarget if there is no v1 resultFile.
* BUILD: Bring NuGet publishing scripts into conformance with new Microsoft requirements.
## **v2.0.0-csd.2.beta.2019-01-09** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2019-01-09) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2019-01-09) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2019-01-09) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2019-01-09)
* BUGFIX: Result matching improvements in properties persistence.
* FEATURE: Fortify FPR converter improvements.
-* API NON-BREAKING: Remove uniqueness requirement from 'result.locations'.
-* API NON-BREAKING: Add 'run.newlineSequences' to schema. https://github.com/oasis-tcs/sarif-spec/issues/169
-* API NON-BREAKING: Add 'rule.deprecatedIds' to schema. https://github.com/oasis-tcs/sarif-spec/issues/293
-* API NON-BREAKING: Add 'versionControlDetails.mappedTo'. https://github.com/oasis-tcs/sarif-spec/issues/248
-* API NON-BREAKING: Add result.rank'. Add 'ruleConfiguration.defaultRank'.
-* API NON-BREAKING: Add 'file.sourceLocation' and 'region.sourceLanguage' to guide in snippet colorization. 'run.defaultSourceLanguage' provides a default value. https://github.com/oasis-tcs/sarif-spec/issues/286
-* API NON-BREAKING: default values for 'result.rank' and 'ruleConfiguration.defaultRank' is now -1.0 (from 0.0). https://github.com/oasis-tcs/sarif-spec/issues/303
-* API BREAKING: Remove 'run.architecture' https://github.com/oasis-tcs/sarif-spec/issues/262
-* API BREAKING: 'result.message' is now a required property https://github.com/oasis-tcs/sarif-spec/issues/283
-* API BREAKING: Rename 'tool.fileVersion' to 'tool.dottedQuadFileVersion' https://github.com/oasis-tcs/sarif-spec/issues/274
-* API BREAKING: Remove 'open' from valid rule default configuration levels. https://github.com/oasis-tcs/sarif-spec/issues/288. The transformer remaps this value to 'note'.
-* API BREAKING: 'run.columnKind' default value is now 'unicodeCodePoints'. https://github.com/Microsoft/sarif-sdk/pull/1160. The transformer will inject 'utf16CodeUnits', however, when this property is absent, as this value is a more appropriate default for the Windows platform.
-* API BREAKING: Make 'run.logicalLocations' an array, not a dictionary. Add result.logicalLocationIndex to point to associated logical location.
-* API BREAKING: 'run.externalFiles' renamed to 'run.externalPropertyFiles', which is not a bundle of external property file objects. NOTE: no transformation will be provided for legacy versions of the external property files API.
-* API BREAKING: rework 'result.provenance' object, including moving result.conversionProvenance to 'result.provenance.conversionSources'. NOTE: no transformation currently exists for this update.
-* API BREAKING: Make 'run.files' an array, not a dictionary. Add fileLocation.fileIndex to point to a file object associated with the location within 'run.files'.
-* API BREAKING: Make 'resources.rules' an array, not a dictionary. Add result.ruleIndex to point to a rule object associated with the result within 'resources.rules'.
-* API BREAKING: 'run.logicalLocations' now requires unique array elements. https://github.com/oasis-tcs/sarif-spec/issues/304
+* API NON-BREAKING: Remove uniqueness requirement from `result.locations`.
+* API NON-BREAKING: Add `run.newlineSequences` to schema. https://github.com/oasis-tcs/sarif-spec/issues/169
+* API NON-BREAKING: Add `rule.deprecatedIds` to schema. https://github.com/oasis-tcs/sarif-spec/issues/293
+* API NON-BREAKING: Add `versionControlDetails.mappedTo`. https://github.com/oasis-tcs/sarif-spec/issues/248
+* API NON-BREAKING: Add result.rank`. Add `ruleConfiguration.defaultRank`.
+* API NON-BREAKING: Add `file.sourceLocation` and `region.sourceLanguage` to guide in snippet colorization. `run.defaultSourceLanguage` provides a default value. https://github.com/oasis-tcs/sarif-spec/issues/286
+* API NON-BREAKING: default values for `result.rank` and `ruleConfiguration.defaultRank` is now -1.0 (from 0.0). https://github.com/oasis-tcs/sarif-spec/issues/303
+* API BREAKING: Remove `run.architecture` https://github.com/oasis-tcs/sarif-spec/issues/262
+* API BREAKING: `result.message` is now a required property https://github.com/oasis-tcs/sarif-spec/issues/283
+* API BREAKING: Rename `tool.fileVersion` to `tool.dottedQuadFileVersion` https://github.com/oasis-tcs/sarif-spec/issues/274
+* API BREAKING: Remove `open` from valid rule default configuration levels. https://github.com/oasis-tcs/sarif-spec/issues/288. The transformer remaps this value to `note`.
+* API BREAKING: `run.columnKind` default value is now `unicodeCodePoints`. https://github.com/Microsoft/sarif-sdk/pull/1160. The transformer will inject `utf16CodeUnits`, however, when this property is absent, as this value is a more appropriate default for the Windows platform.
+* API BREAKING: Make `run.logicalLocations` an array, not a dictionary. Add result.logicalLocationIndex to point to associated logical location.
+* API BREAKING: `run.externalFiles` renamed to `run.externalPropertyFiles`, which is not a bundle of external property file objects. NOTE: no transformation will be provided for legacy versions of the external property files API.
+* API BREAKING: rework `result.provenance` object, including moving result.conversionProvenance to `result.provenance.conversionSources`. NOTE: no transformation currently exists for this update.
+* API BREAKING: Make `run.files` an array, not a dictionary. Add fileLocation.fileIndex to point to a file object associated with the location within `run.files`.
+* API BREAKING: Make `resources.rules` an array, not a dictionary. Add result.ruleIndex to point to a rule object associated with the result within `resources.rules`.
+* API BREAKING: `run.logicalLocations` now requires unique array elements. https://github.com/oasis-tcs/sarif-spec/issues/304
## **v2.0.0-csd.2.beta.2019.01.24** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2019.01.24) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2019.01.24) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2019.01.24)) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2019.01.24))
* BUGFIX: SDK compatibility update for sample apps.
-* BUGFIX: Add Sarif.Multitool.exe.config file to multitool package to resolve "Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0'" exception on using validate command.
-* API BREAKING: rename baselineState 'existing' value to 'unchanged'. Add new baselineState value 'updated'. https://github.com/oasis-tcs/sarif-spec/issues/312
-* API BREAKING: unify result and notification failure levels ('note', 'warning', 'error'). Break out result evaluation state into 'result.kind' property with values 'pass', 'fail', 'open', 'review', 'notApplicable'. https://github.com/oasis-tcs/sarif-spec/issues/317
+* BUGFIX: Add Sarif.Multitool.exe.config file to multitool package to resolve "Could not load file or assembly `Newtonsoft.Json, Version=9.0.0.0`" exception on using validate command.
+* API BREAKING: rename baselineState `existing` value to `unchanged`. Add new baselineState value `updated`. https://github.com/oasis-tcs/sarif-spec/issues/312
+* API BREAKING: unify result and notification failure levels (`note`, `warning`, `error`). Break out result evaluation state into `result.kind` property with values `pass`, `fail`, `open`, `review`, `notApplicable`. https://github.com/oasis-tcs/sarif-spec/issues/317
* API BREAKING: remove IRule entirely, in favor of utilizing ReportingDescriptor base class.
-* API BREAKING: define 'toolComponent' object to persist tool data. The 'tool.driver' component documents the standard driver metadata. 'tool.extensions' is an array of 'toolComponent' instances that describe extensions to the core analyzer. This change also deletes 'tool.sarifLoggerVersion' (from the newly created 'toolComponent' object) due to its lack of utility. Adds 'result.extensionIndex' to allow results to be associated with a plug-in. 'toolComponent' also added as a new file role. https://github.com/oasis-tcs/sarif-spec/issues/179
-* API BREAKING: Remove 'run.resources' object. Rename 'rule' object to 'reportingDescriptor'. Move rule and notification reportingDescriptor objects to 'tool.notificationDescriptors' and 'tool.ruleDescriptors'. 'resources.messageStrings' now located at 'toolComponent.globalMessageStrings'. 'rule.configuration' property now named 'reportingDescriptor.defaultConfiguration'. 'reportingConfiguration.defaultLevel' and 'reportingConfiguration.defaultRank' simplified to 'reportingConfiguration.level' and 'reportingConfiguration.rank'. Actual runtime reportingConfiguration persisted to new array of reportingConfiguration objects at 'invocation.reportingConfiguration'. https://github.com/oasis-tcs/sarif-spec/issues/311
-* API BREAKING: 'run.richTextMessageMimeType' renamed to 'run.markdownMessageMimeType'. 'message.richText' renamed to 'message.markdown'. 'message.richMessageId' deleted. Create 'multiformatMessageString' object, that holds plain text and markdown message format strings. 'reportingDescriptor.messageStrings' is now a dictionary of these objects, keyed by message id. 'reporting.Descriptor.richMessageStrings' dictionary is deleted. https://github.com/oasis-tcs/sarif-spec/issues/319
-* API BREAKING: 'threadflowLocation.kind' is now 'threadflowLocation.kinds', an array of strings that categorize the thread flow location. https://github.com/oasis-tcs/sarif-spec/issues/202
+* API BREAKING: define `toolComponent` object to persist tool data. The `tool.driver` component documents the standard driver metadata. `tool.extensions` is an array of `toolComponent` instances that describe extensions to the core analyzer. This change also deletes `tool.sarifLoggerVersion` (from the newly created `toolComponent` object) due to its lack of utility. Adds `result.extensionIndex` to allow results to be associated with a plug-in. `toolComponent` also added as a new file role. https://github.com/oasis-tcs/sarif-spec/issues/179
+* API BREAKING: Remove `run.resources` object. Rename `rule` object to `reportingDescriptor`. Move rule and notification reportingDescriptor objects to `tool.notificationDescriptors` and `tool.ruleDescriptors`. `resources.messageStrings` now located at `toolComponent.globalMessageStrings`. `rule.configuration` property now named `reportingDescriptor.defaultConfiguration`. `reportingConfiguration.defaultLevel` and `reportingConfiguration.defaultRank` simplified to `reportingConfiguration.level` and `reportingConfiguration.rank`. Actual runtime reportingConfiguration persisted to new array of reportingConfiguration objects at `invocation.reportingConfiguration`. https://github.com/oasis-tcs/sarif-spec/issues/311
+* API BREAKING: `run.richTextMessageMimeType` renamed to `run.markdownMessageMimeType`. `message.richText` renamed to `message.markdown`. `message.richMessageId` deleted. Create `multiformatMessageString` object, that holds plain text and markdown message format strings. `reportingDescriptor.messageStrings` is now a dictionary of these objects, keyed by message id. `reporting.Descriptor.richMessageStrings` dictionary is deleted. https://github.com/oasis-tcs/sarif-spec/issues/319
+* API BREAKING: `threadflowLocation.kind` is now `threadflowLocation.kinds`, an array of strings that categorize the thread flow location. https://github.com/oasis-tcs/sarif-spec/issues/202
## **v2.0.0-csd.2.beta.2019.01.24.1** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2019.01.24.1) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2019.01.24.1) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2019.01.24.1)) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2019.01.24.1))
-* BUGFIX: 'region.charOffset' default value should be -1 (invalid value) rather than 0. Fixes an issue where 'region.charLength' is > 0 but 'region.charOffset' is absent (because its value of 0 was incorrectly elided due to being the default value).
+* BUGFIX: `region.charOffset` default value should be -1 (invalid value) rather than 0. Fixes an issue where `region.charLength` is > 0 but `region.charOffset` is absent (because its value of 0 was incorrectly elided due to being the default value).
## **v2.0.0-csd.2.beta.2019.02.20** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/2.0.0-csd.2.beta.2019.02.20) | [Driver](https://www.nuget.org/packages/Sarif.Driver/2.0.0-csd.2.beta.2019.02.20) | [Converters](https://www.nuget.org/packages/Sarif.Converters/2.0.0-csd.2.beta.2019.02.20)) | [Multitool](https://www.nuget.org/packages/Sarif.Multitool/2.0.0-csd.2.beta.2019.02.20))
-* API BREAKING: Remove 'invocation.attachments', now replaced by 'run.tool.extensions'. https://github.com/oasis-tcs/sarif-spec/issues/327
-* API BREAKING: Remove 'tool.language' and localization support. https://github.com/oasis-tcs/sarif-spec/issues/325
-* API NON-BREAKING: Improve logicalLocation.kind. https://github.com/oasis-tcs/sarif-spec/issues/291
+* API BREAKING: Remove `invocation.attachments`, now replaced by `run.tool.extensions`. https://github.com/oasis-tcs/sarif-spec/issues/327
+* API BREAKING: Remove `tool.language` and localization support. https://github.com/oasis-tcs/sarif-spec/issues/325
+* API NON-BREAKING: Add additional properties to toolComponent. https://github.com/oasis-tcs/sarif-spec/issues/336
diff --git a/src/Sarif/Autogenerated/ToolComponent.cs b/src/Sarif/Autogenerated/ToolComponent.cs
index 0400d255a..3bfa38ce3 100644
--- a/src/Sarif/Autogenerated/ToolComponent.cs
+++ b/src/Sarif/Autogenerated/ToolComponent.cs
@@ -40,6 +40,30 @@ public SarifNodeKind SarifNodeKind
[DataMember(Name = "name", IsRequired = true)]
public string Name { get; set; }
+ ///
+ /// The organization or company that produced the tool.
+ ///
+ [DataMember(Name = "organization", IsRequired = false, EmitDefaultValue = false)]
+ public string Organization { get; set; }
+
+ ///
+ /// A product suite to which the tool belongs.
+ ///
+ [DataMember(Name = "product", IsRequired = false, EmitDefaultValue = false)]
+ public string Product { get; set; }
+
+ ///
+ /// A brief description of the tool.
+ ///
+ [DataMember(Name = "shortDescription", IsRequired = false, EmitDefaultValue = false)]
+ public MultiformatMessageString ShortDescription { get; set; }
+
+ ///
+ /// A comprehensive description of the tool.
+ ///
+ [DataMember(Name = "fullDescription", IsRequired = false, EmitDefaultValue = false)]
+ public MultiformatMessageString FullDescription { get; set; }
+
///
/// The name of the component along with its version and any other useful identifying information, such as its locale.
///
@@ -118,6 +142,18 @@ public ToolComponent()
///
/// An initialization value for the property.
///
+ ///
+ /// An initialization value for the property.
+ ///
+ ///
+ /// An initialization value for the property.
+ ///
+ ///
+ /// An initialization value for the property.
+ ///
+ ///
+ /// An initialization value for the property.
+ ///
///
/// An initialization value for the property.
///
@@ -148,9 +184,9 @@ public ToolComponent()
///
/// An initialization value for the property.
///
- public ToolComponent(string name, string fullName, string version, string semanticVersion, string dottedQuadFileVersion, Uri downloadUri, IDictionary globalMessageStrings, IEnumerable notificationDescriptors, IEnumerable ruleDescriptors, int artifactIndex, IDictionary properties)
+ public ToolComponent(string name, string organization, string product, MultiformatMessageString shortDescription, MultiformatMessageString fullDescription, string fullName, string version, string semanticVersion, string dottedQuadFileVersion, Uri downloadUri, IDictionary globalMessageStrings, IEnumerable notificationDescriptors, IEnumerable ruleDescriptors, int artifactIndex, IDictionary properties)
{
- Init(name, fullName, version, semanticVersion, dottedQuadFileVersion, downloadUri, globalMessageStrings, notificationDescriptors, ruleDescriptors, artifactIndex, properties);
+ Init(name, organization, product, shortDescription, fullDescription, fullName, version, semanticVersion, dottedQuadFileVersion, downloadUri, globalMessageStrings, notificationDescriptors, ruleDescriptors, artifactIndex, properties);
}
///
@@ -169,7 +205,7 @@ public ToolComponent(ToolComponent other)
throw new ArgumentNullException(nameof(other));
}
- Init(other.Name, other.FullName, other.Version, other.SemanticVersion, other.DottedQuadFileVersion, other.DownloadUri, other.GlobalMessageStrings, other.NotificationDescriptors, other.RuleDescriptors, other.ArtifactIndex, other.Properties);
+ Init(other.Name, other.Organization, other.Product, other.ShortDescription, other.FullDescription, other.FullName, other.Version, other.SemanticVersion, other.DottedQuadFileVersion, other.DownloadUri, other.GlobalMessageStrings, other.NotificationDescriptors, other.RuleDescriptors, other.ArtifactIndex, other.Properties);
}
ISarifNode ISarifNode.DeepClone()
@@ -190,9 +226,21 @@ private ISarifNode DeepCloneCore()
return new ToolComponent(this);
}
- private void Init(string name, string fullName, string version, string semanticVersion, string dottedQuadFileVersion, Uri downloadUri, IDictionary globalMessageStrings, IEnumerable notificationDescriptors, IEnumerable ruleDescriptors, int artifactIndex, IDictionary properties)
+ private void Init(string name, string organization, string product, MultiformatMessageString shortDescription, MultiformatMessageString fullDescription, string fullName, string version, string semanticVersion, string dottedQuadFileVersion, Uri downloadUri, IDictionary globalMessageStrings, IEnumerable notificationDescriptors, IEnumerable ruleDescriptors, int artifactIndex, IDictionary properties)
{
Name = name;
+ Organization = organization;
+ Product = product;
+ if (shortDescription != null)
+ {
+ ShortDescription = new MultiformatMessageString(shortDescription);
+ }
+
+ if (fullDescription != null)
+ {
+ FullDescription = new MultiformatMessageString(fullDescription);
+ }
+
FullName = fullName;
Version = version;
SemanticVersion = semanticVersion;
diff --git a/src/Sarif/Autogenerated/ToolComponentEqualityComparer.cs b/src/Sarif/Autogenerated/ToolComponentEqualityComparer.cs
index ffee176a8..debb0580d 100644
--- a/src/Sarif/Autogenerated/ToolComponentEqualityComparer.cs
+++ b/src/Sarif/Autogenerated/ToolComponentEqualityComparer.cs
@@ -33,6 +33,26 @@ public bool Equals(ToolComponent left, ToolComponent right)
return false;
}
+ if (left.Organization != right.Organization)
+ {
+ return false;
+ }
+
+ if (left.Product != right.Product)
+ {
+ return false;
+ }
+
+ if (!MultiformatMessageString.ValueComparer.Equals(left.ShortDescription, right.ShortDescription))
+ {
+ return false;
+ }
+
+ if (!MultiformatMessageString.ValueComparer.Equals(left.FullDescription, right.FullDescription))
+ {
+ return false;
+ }
+
if (left.FullName != right.FullName)
{
return false;
@@ -167,6 +187,26 @@ public int GetHashCode(ToolComponent obj)
result = (result * 31) + obj.Name.GetHashCode();
}
+ if (obj.Organization != null)
+ {
+ result = (result * 31) + obj.Organization.GetHashCode();
+ }
+
+ if (obj.Product != null)
+ {
+ result = (result * 31) + obj.Product.GetHashCode();
+ }
+
+ if (obj.ShortDescription != null)
+ {
+ result = (result * 31) + obj.ShortDescription.ValueGetHashCode();
+ }
+
+ if (obj.FullDescription != null)
+ {
+ result = (result * 31) + obj.FullDescription.ValueGetHashCode();
+ }
+
if (obj.FullName != null)
{
result = (result * 31) + obj.FullName.GetHashCode();
diff --git a/src/Sarif/Schemata/sarif-schema.json b/src/Sarif/Schemata/sarif-schema.json
index 41c582249..c2ba620e5 100644
--- a/src/Sarif/Schemata/sarif-schema.json
+++ b/src/Sarif/Schemata/sarif-schema.json
@@ -2107,6 +2107,26 @@
"type": "string"
},
+ "organization": {
+ "description": "The organization or company that produced the tool.",
+ "type": "string"
+ },
+
+ "product": {
+ "description": "A product suite to which the tool belongs.",
+ "type": "string"
+ },
+
+ "shortDescription": {
+ "description": "A brief description of the tool.",
+ "$ref": "#/definitions/multiformatMessageString"
+ },
+
+ "fullDescription": {
+ "description": "A comprehensive description of the tool.",
+ "$ref": "#/definitions/multiformatMessageString"
+ },
+
"fullName": {
"description": "The name of the component along with its version and any other useful identifying information, such as its locale.",
"type": "string"