in packages/azure-openapi-validator/autorest/src/spectral-plugin-utils.ts [78:151]
export async function runSpectral(
sendMessage: (m: Message) => void,
spectral: Spectral,
rulesetPayload: SpectralRulesetPayload,
openApiSpecFilePath: string,
openApiSpecYml: any
) {
const mergedResults = []
const convertSeverity = (severity: number) => {
switch (severity) {
case 0:
return "error"
case 1:
return "warning"
case 2:
return "info"
default:
return "info"
}
}
const convertRange = (range: any) => {
return {
start: {
line: range.start.line + 1,
column: range.start.character,
},
end: {
line: range.end.line + 1,
column: range.end.character,
},
}
}
// this function is added temporarily , should be remove after the autorest fix this issues.
const removeXmsExampleFromPath = (paths: JsonPath) => {
const index = paths.findIndex((item) => item === "x-ms-examples")
if (index !== -1 && paths.length > index + 2) {
return paths.slice(0, index + 2)
}
return paths
}
const formatAsLintResultMessage = (result: ISpectralDiagnostic, spec: string): LintResultMessage => {
return {
type: convertSeverity(result.severity),
category: "",
code: result.code,
message: result.message,
jsonpath: result.path && result.path.length ? removeXmsExampleFromPath(result.path) : [],
sources: [`${spec}`],
location: {
line: result.range.start.line + 1,
column: result.range.start.character,
},
range: convertRange(result.range),
rpcGuidelineCode: rulesetPayload.rules[result.code]?.rpcGuidelineCode ?? "",
} as LintResultMessage
}
// Newest source of spectral.run as of 2/23/2024
// https://github.com/stoplightio/spectral/blob/ffa6ebeabbaa0441c8c967ef4e11a7a0a8c66aac/packages/core/src/spectral.ts#L79
// Note: version used in this code is likely older than newest.
const results: ISpectralDiagnostic[] = await spectral.run(openApiSpecYml)
mergedResults.push(
...results.map((result: ISpectralDiagnostic) => formatAsLintResultMessage(result, createFileOrFolderUri(openApiSpecFilePath)))
)
for (const message of mergedResults) {
sendMessage(convertLintMsgToAutoRestMsg(message))
}
return mergedResults
}