30 lines
900 B
TypeScript
30 lines
900 B
TypeScript
import * as LSPClient from "./client"
|
|
|
|
const MAX_PER_FILE = 20
|
|
|
|
export function pretty(diagnostic: LSPClient.Diagnostic) {
|
|
const severityMap = {
|
|
1: "ERROR",
|
|
2: "WARN",
|
|
3: "INFO",
|
|
4: "HINT",
|
|
}
|
|
|
|
const severity = severityMap[diagnostic.severity || 1]
|
|
const line = diagnostic.range.start.line + 1
|
|
const col = diagnostic.range.start.character + 1
|
|
|
|
return `${severity} [${line}:${col}] ${diagnostic.message}`
|
|
}
|
|
|
|
export function report(file: string, issues: LSPClient.Diagnostic[]) {
|
|
const errors = issues.filter((item) => item.severity === 1)
|
|
if (errors.length === 0) return ""
|
|
const limited = errors.slice(0, MAX_PER_FILE)
|
|
const more = errors.length - MAX_PER_FILE
|
|
const suffix = more > 0 ? `\n... and ${more} more` : ""
|
|
return `<diagnostics file="${file}">\n${limited.map(pretty).join("\n")}${suffix}\n</diagnostics>`
|
|
}
|
|
|
|
export * as Diagnostic from "./diagnostic"
|