UNPKG

fish-lsp

Version:

LSP implementation for fish/fish-shell

76 lines (75 loc) 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isPossibleDiagnosticComment = isPossibleDiagnosticComment; exports.detectInvalidDiagnosticCodes = detectInvalidDiagnosticCodes; exports.checkForInvalidDiagnosticCodes = checkForInvalidDiagnosticCodes; const vscode_languageserver_1 = require("vscode-languageserver"); const error_codes_1 = require("./error-codes"); const node_types_1 = require("../utils/node-types"); const logger_1 = require("../logger"); const DIAGNOSTIC_COMMENT_REGEX = /^#\s*@fish-lsp-(disable|enable)(?:-(next-line))?\s/; function isPossibleDiagnosticComment(node) { if (!(0, node_types_1.isComment)(node)) return false; return DIAGNOSTIC_COMMENT_REGEX.test(node.text.trim()); } function findCodes(text) { const directiveMatch = text.match(/@fish-lsp-(?:disable|enable)(?:-next-line)?/); if (!directiveMatch) return []; const codesStart = directiveMatch.index + directiveMatch[0].length; const codesSection = text.slice(codesStart); const result = []; const codeRegex = /(\d+)/g; let match; while ((match = codeRegex.exec(codesSection)) !== null) { result.push({ code: match[0], startIndex: codesStart + match.index, }); } logger_1.logger.log('Found codes:', result, 'on text:', text); logger_1.logger.log('Directive:', directiveMatch); return result; } function detectInvalidDiagnosticCodes(node) { if (!(0, node_types_1.isComment)(node)) return []; const text = node.text.trim(); if (!DIAGNOSTIC_COMMENT_REGEX.test(text)) return []; const codePositions = findCodes(text); const diagnostics = []; for (const { code, startIndex } of codePositions) { const codeNum = parseInt(code, 10); if (isNaN(codeNum) || !error_codes_1.ErrorCodes.allErrorCodes.includes(codeNum)) { diagnostics.push({ severity: vscode_languageserver_1.DiagnosticSeverity.Warning, range: { start: { line: node.startPosition.row, character: node.startPosition.column + startIndex, }, end: { line: node.startPosition.row, character: node.startPosition.column + startIndex + code.length, }, }, message: `Invalid diagnostic code: '${code}'. Valid codes are: ${error_codes_1.ErrorCodes.allErrorCodes.join(', ')}.`, source: 'fish-lsp', code: 'invalidDiagnosticCode', data: { node, invalidCode: code, }, }); } } return diagnostics; } function checkForInvalidDiagnosticCodes(node) { if (isPossibleDiagnosticComment(node)) { return detectInvalidDiagnosticCodes(node); } return []; }