UNPKG

yaml-language-server

Version:
77 lines 3.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValidationHandler = void 0; const isKubernetes_1 = require("../../languageservice/parser/isKubernetes"); const arrUtils_1 = require("../../languageservice/utils/arrUtils"); class ValidationHandler { constructor(connection, languageService, yamlSettings) { this.connection = connection; this.languageService = languageService; this.yamlSettings = yamlSettings; this.yamlSettings.documents.onDidChangeContent((change) => { this.validate(change.document); }); this.yamlSettings.documents.onDidClose((event) => { this.cleanPendingValidation(event.document); this.connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] }); }); } validate(textDocument) { this.cleanPendingValidation(textDocument); this.yamlSettings.pendingValidationRequests[textDocument.uri] = setTimeout(() => { delete this.yamlSettings.pendingValidationRequests[textDocument.uri]; this.validateTextDocument(textDocument); }, this.yamlSettings.validationDelayMs); } cleanPendingValidation(textDocument) { const request = this.yamlSettings.pendingValidationRequests[textDocument.uri]; if (request) { clearTimeout(request); delete this.yamlSettings.pendingValidationRequests[textDocument.uri]; } } async validateTextDocument(textDocument) { if (!textDocument) { return; } const validationEnabled = await this.resolveValidationState(textDocument); if (!validationEnabled) { this.connection.sendDiagnostics({ uri: textDocument.uri, diagnostics: [] }); return []; } const diagnosticResults = await this.languageService.doValidation(textDocument, (0, isKubernetes_1.isKubernetesAssociatedDocument)(textDocument, this.yamlSettings.specificValidatorPaths)); const diagnostics = []; for (const diagnosticItem of diagnosticResults) { // Convert all warnings to errors if (diagnosticItem.severity === 2) { diagnosticItem.severity = 1; } diagnostics.push(diagnosticItem); } const removeDuplicatesDiagnostics = (0, arrUtils_1.removeDuplicatesObj)(diagnostics); this.connection.sendDiagnostics({ uri: textDocument.uri, diagnostics: removeDuplicatesDiagnostics, }); return removeDuplicatesDiagnostics; } async resolveValidationState(document) { if (this.yamlSettings.hasConfigurationCapability && this.connection.workspace?.getConfiguration) { try { const scopedLanguageSettings = await this.connection.workspace.getConfiguration({ section: `[${document.languageId}]`, scopeUri: document.uri, }); if (typeof scopedLanguageSettings?.['yaml.validate'] === 'boolean') { return scopedLanguageSettings['yaml.validate']; } } catch { // ignore and fall back to global setting } } return this.yamlSettings.yamlShouldValidate; } } exports.ValidationHandler = ValidationHandler; //# sourceMappingURL=validationHandlers.js.map