diff --git a/src/lsp/providers/diagnosticsProvider.ts b/src/lsp/providers/diagnosticsProvider.ts index 4d0e58032a84fcbe68bb55100ada5a682b2943c9..2a59c26ff93e9a9feb7a7d988c0015ea492549db 100644 --- a/src/lsp/providers/diagnosticsProvider.ts +++ b/src/lsp/providers/diagnosticsProvider.ts @@ -22,8 +22,8 @@ import semver from 'semver' import { getLanguageBoundaries } from '../util/getLanguageBoundaries' import { absoluteRange } from '../util/absoluteRange' import { isObject } from '../../class-names/isObject' +import levenshtein from 'js-levenshtein' import { stringToPath } from '../util/stringToPath' -import { closest } from '../util/closest' function getUnsupportedApplyDiagnostics( state: State, @@ -170,12 +170,6 @@ if (screens.includes(match.groups.screen)) { return null } - let message = `The screen '${match.groups.screen}' does not exist in your theme config.` - let suggestion = closest(match.groups.screen, screens) - if (suggestion) { - message += ` Did you mean '${suggestion}'?` - } - diagnostics.push({ range: absoluteRange( { @@ -191,7 +185,7 @@ severity: severity === 'error' ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, - message, + message: 'Unknown screen', }) }) }) @@ -233,12 +227,6 @@ if (state.variants.includes(variant)) { continue } - let message = `The variant '${variant}' does not exist.` - let suggestion = closest(variant, state.variants) - if (suggestion) { - message += ` Did you mean '${suggestion}'?` - } - let variantStartIndex = listStartIndex + variants.slice(0, i).join('').length @@ -254,7 +242,7 @@ severity: severity === 'error' ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, - message, + message: `Unknown variant: ${variant}`, }) } }) @@ -341,14 +329,17 @@ ...base, ...keys.slice(0, keys.length - 1), ]) if (isObject(parentValue)) { - let closestValidKey = closest( - keys[keys.length - 1], - Object.keys(parentValue).filter((key) => isValid(parentValue[key])) - ) - if (closestValidKey) { + let validKeys = Object.keys(parentValue) + .filter((key) => isValid(parentValue[key])) + .sort( + (a, b) => + levenshtein(keys[keys.length - 1], a) - + levenshtein(keys[keys.length - 1], b) + ) + if (validKeys.length) { message += ` Did you mean '${stitch([ ...keys.slice(0, keys.length - 1), - closestValidKey, + validKeys[0], ])}'?` } } @@ -431,16 +422,6 @@ if (valid.includes(match.groups.value)) { return null } - let message = `'${match.groups.value}' is not a valid group.` - if (match.groups.value === 'preflight') { - message += ` Did you mean 'base'?` - } else { - let suggestion = closest(match.groups.value, valid) - if (suggestion) { - message += ` Did you mean '${suggestion}'?` - } - } - diagnostics.push({ range: absoluteRange( { @@ -456,7 +437,9 @@ severity: severity === 'error' ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, - message, + message: `Unsupported value: ${match.groups.value}${ + match.groups.value === 'preflight' ? '. Use base instead.' : '' + }`, }) }) }) diff --git a/src/lsp/util/closest.ts b/src/lsp/util/closest.ts deleted file mode 100644 index 3153cb8e8a48bde030c2d34d4149b2a364a9e942..0000000000000000000000000000000000000000 --- a/src/lsp/util/closest.ts +++ /dev/null @@ -1,7 +0,0 @@ -import levenshtein from 'js-levenshtein' - -export function closest(input: string, options: string[]): string | undefined { - return options.sort( - (a, b) => levenshtein(input, a) - levenshtein(input, b) - )[0] -}