cspell-lib 10.0.1 → 10.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/Settings/Controller/configLoader/configLoader.d.ts +2 -0
- package/dist/lib/Settings/Controller/configLoader/configLoader.js +12 -1
- package/dist/lib/textValidation/docValidator.js +4 -2
- package/dist/lib/textValidation/textValidator.d.ts +2 -1
- package/dist/lib/textValidation/textValidator.js +11 -2
- package/package.json +25 -25
|
@@ -95,6 +95,7 @@ export interface IConfigLoader {
|
|
|
95
95
|
getStats(): Readonly<Record<string, Readonly<Record<string, number>>>>;
|
|
96
96
|
readonly isTrusted: boolean;
|
|
97
97
|
setIsTrusted(isTrusted: boolean): void;
|
|
98
|
+
isTrustedUrl(url: URL): boolean;
|
|
98
99
|
}
|
|
99
100
|
export declare const defaultExtensionsAll: string[];
|
|
100
101
|
export declare class ConfigLoader implements IConfigLoader {
|
|
@@ -166,6 +167,7 @@ export declare class ConfigLoader implements IConfigLoader {
|
|
|
166
167
|
private resolveFilename;
|
|
167
168
|
get isTrusted(): boolean;
|
|
168
169
|
setIsTrusted(isTrusted: boolean): void;
|
|
170
|
+
isTrustedUrl(url: URL): boolean;
|
|
169
171
|
}
|
|
170
172
|
declare class ConfigLoaderInternal extends ConfigLoader {
|
|
171
173
|
constructor(vfs: VFileSystem);
|
|
@@ -176,7 +176,8 @@ export class ConfigLoader {
|
|
|
176
176
|
async resolveDefaultConfig() {
|
|
177
177
|
const r = await this.fileResolver.resolveFile(defaultConfigFileModuleRef, srcDirectory);
|
|
178
178
|
const url = toFileURL(r.filename);
|
|
179
|
-
|
|
179
|
+
const baseUrl = new URL('../..', url); // go up two directories to get out of the node_modules directory.
|
|
180
|
+
this.cspellConfigFileReaderWriter.setTrustedUrls([baseUrl]);
|
|
180
181
|
return url;
|
|
181
182
|
}
|
|
182
183
|
importSettings(fileRef, pnpSettings, backReferences) {
|
|
@@ -250,6 +251,8 @@ export class ConfigLoader {
|
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
253
|
async setupPnp(cfgFile, pnpSettings) {
|
|
254
|
+
if (!this.#isTrusted)
|
|
255
|
+
return;
|
|
253
256
|
if (!pnpSettings?.usePnP || pnpSettings === defaultPnPSettings)
|
|
254
257
|
return;
|
|
255
258
|
if (cfgFile.url.protocol !== 'file:')
|
|
@@ -410,6 +413,14 @@ export class ConfigLoader {
|
|
|
410
413
|
this.configSearch = new ConfigSearch(searchPlaces, isTrusted ? trustedSearch : unTrustedSearch, this.fs);
|
|
411
414
|
this.cspellConfigFileReaderWriter.setUntrustedExtensions(isTrusted ? [] : defaultJsExtensions);
|
|
412
415
|
}
|
|
416
|
+
isTrustedUrl(url) {
|
|
417
|
+
if (!this.#isTrusted) {
|
|
418
|
+
const ext = path.extname(url.pathname).toLowerCase();
|
|
419
|
+
if (defaultJsExtensions.includes(ext))
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
return this.cspellConfigFileReaderWriter.isTrusted(url);
|
|
423
|
+
}
|
|
413
424
|
async #extractStopSearchAtURLs(options) {
|
|
414
425
|
if (!options?.stopSearchAt)
|
|
415
426
|
return undefined;
|
|
@@ -106,7 +106,8 @@ export class DocumentValidator {
|
|
|
106
106
|
this.addPossibleError(`Missing substitutions: ${sub.missing.join(', ')}`);
|
|
107
107
|
}
|
|
108
108
|
const validateOptions = { ...settingsToValidateOptions(finalSettings), transformer: sub.transformer };
|
|
109
|
-
const
|
|
109
|
+
const rangeTransformer = finalSettings.substitutions?.length ? sub.transformer : undefined;
|
|
110
|
+
const includeRanges = calcTextInclusionRanges(this._document.text, validateOptions, rangeTransformer);
|
|
110
111
|
const segmenter = createMappedTextSegmenter(includeRanges);
|
|
111
112
|
const textValidator = textValidatorFactory(dict, validateOptions);
|
|
112
113
|
recFinalizeTime();
|
|
@@ -143,7 +144,8 @@ export class DocumentValidator {
|
|
|
143
144
|
this.addPossibleError(`Missing substitutions: ${sub.missing.join(', ')}`);
|
|
144
145
|
}
|
|
145
146
|
const validateOptions = { ...settingsToValidateOptions(finalSettings), transformer: sub.transformer };
|
|
146
|
-
const
|
|
147
|
+
const rangeTransformer = finalSettings.substitutions?.length ? sub.transformer : undefined;
|
|
148
|
+
const includeRanges = calcTextInclusionRanges(this._document.text, validateOptions, rangeTransformer);
|
|
147
149
|
const segmenter = createMappedTextSegmenter(includeRanges);
|
|
148
150
|
const textValidator = textValidatorFactory(dict, validateOptions);
|
|
149
151
|
this._preparations = {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SpellingDictionary } from 'cspell-dictionary';
|
|
2
2
|
import type { ValidationResult } from '../Models/ValidationResult.js';
|
|
3
|
+
import type { SubstitutionTransformer } from '../Transform/index.js';
|
|
3
4
|
import * as TextRange from '../Transform/index.js';
|
|
4
5
|
import type { IncludeExcludeOptions, LineSegment, ValidationOptions } from './ValidationTypes.js';
|
|
5
6
|
/**
|
|
@@ -7,7 +8,7 @@ import type { IncludeExcludeOptions, LineSegment, ValidationOptions } from './Va
|
|
|
7
8
|
* @deprecation Use spellCheckDocument
|
|
8
9
|
*/
|
|
9
10
|
export declare function validateText(text: string, dict: SpellingDictionary, options: ValidationOptions): Iterable<ValidationResult>;
|
|
10
|
-
export declare function calcTextInclusionRanges(text: string, options: IncludeExcludeOptions): TextRange.MatchRange[];
|
|
11
|
+
export declare function calcTextInclusionRanges(text: string, options: IncludeExcludeOptions, transformer?: SubstitutionTransformer): TextRange.MatchRange[];
|
|
11
12
|
/**
|
|
12
13
|
* Returns a mapper function that will segment a TextOffset based upon the includeRanges.
|
|
13
14
|
* This function is optimized for forward scanning. It will perform poorly for randomly ordered offsets.
|
|
@@ -23,13 +23,22 @@ export function validateText(text, dict, options) {
|
|
|
23
23
|
}), opTake(maxNumberOfProblems));
|
|
24
24
|
return iter;
|
|
25
25
|
}
|
|
26
|
-
export function calcTextInclusionRanges(text, options) {
|
|
26
|
+
export function calcTextInclusionRanges(text, options, transformer) {
|
|
27
27
|
const { ignoreRegExpList = [], includeRegExpList = [] } = options;
|
|
28
28
|
const filteredIncludeList = includeRegExpList.filter((a) => !!a);
|
|
29
29
|
const finalIncludeList = filteredIncludeList.length ? filteredIncludeList : [/.*/gim];
|
|
30
|
-
const
|
|
30
|
+
const excludeRanges = TextRange.findMatchingRangesForPatterns(ignoreRegExpList, text).filter((range) => !isFullySubstitutedRange(text, range, transformer));
|
|
31
|
+
const includeRanges = TextRange.excludeRanges(TextRange.findMatchingRangesForPatterns(finalIncludeList, text), excludeRanges);
|
|
31
32
|
return includeRanges;
|
|
32
33
|
}
|
|
34
|
+
function isFullySubstitutedRange(text, range, transformer) {
|
|
35
|
+
if (!transformer)
|
|
36
|
+
return false;
|
|
37
|
+
const source = text.slice(range.startPos, range.endPos);
|
|
38
|
+
const transformed = transformer.transform(source);
|
|
39
|
+
// One source-map segment means a single substitution consumed the entire ignored range.
|
|
40
|
+
return transformed.text !== source && transformed.map?.length === 2 && transformed.map[0] === source.length;
|
|
41
|
+
}
|
|
33
42
|
function mapLineToLineSegments(includeRanges) {
|
|
34
43
|
const mapAgainstRanges = mapLineSegmentAgainstRangesFactory(includeRanges);
|
|
35
44
|
return (line) => {
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public",
|
|
5
5
|
"provenance": true
|
|
6
6
|
},
|
|
7
|
-
"version": "10.
|
|
7
|
+
"version": "10.1.1",
|
|
8
8
|
"description": "A library of useful functions used across various cspell tools.",
|
|
9
9
|
"type": "module",
|
|
10
10
|
"sideEffects": false,
|
|
@@ -75,22 +75,22 @@
|
|
|
75
75
|
},
|
|
76
76
|
"homepage": "https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell-lib#readme",
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@cspell/cspell-bundled-dicts": "10.
|
|
79
|
-
"@cspell/cspell-performance-monitor": "10.
|
|
80
|
-
"@cspell/cspell-pipe": "10.
|
|
81
|
-
"@cspell/cspell-resolver": "10.
|
|
82
|
-
"@cspell/cspell-types": "10.
|
|
83
|
-
"@cspell/dynamic-import": "10.
|
|
84
|
-
"@cspell/filetypes": "10.
|
|
85
|
-
"@cspell/rpc": "10.
|
|
86
|
-
"@cspell/strong-weak-map": "10.
|
|
87
|
-
"@cspell/url": "10.
|
|
88
|
-
"cspell-config-lib": "10.
|
|
89
|
-
"cspell-dictionary": "10.
|
|
90
|
-
"cspell-glob": "10.
|
|
91
|
-
"cspell-grammar": "10.
|
|
92
|
-
"cspell-io": "10.
|
|
93
|
-
"cspell-trie-lib": "10.
|
|
78
|
+
"@cspell/cspell-bundled-dicts": "10.1.1",
|
|
79
|
+
"@cspell/cspell-performance-monitor": "10.1.1",
|
|
80
|
+
"@cspell/cspell-pipe": "10.1.1",
|
|
81
|
+
"@cspell/cspell-resolver": "10.1.1",
|
|
82
|
+
"@cspell/cspell-types": "10.1.1",
|
|
83
|
+
"@cspell/dynamic-import": "10.1.1",
|
|
84
|
+
"@cspell/filetypes": "10.1.1",
|
|
85
|
+
"@cspell/rpc": "10.1.1",
|
|
86
|
+
"@cspell/strong-weak-map": "10.1.1",
|
|
87
|
+
"@cspell/url": "10.1.1",
|
|
88
|
+
"cspell-config-lib": "10.1.1",
|
|
89
|
+
"cspell-dictionary": "10.1.1",
|
|
90
|
+
"cspell-glob": "10.1.1",
|
|
91
|
+
"cspell-grammar": "10.1.1",
|
|
92
|
+
"cspell-io": "10.1.1",
|
|
93
|
+
"cspell-trie-lib": "10.1.1",
|
|
94
94
|
"env-paths": "^4.0.0",
|
|
95
95
|
"gensequence": "^8.0.8",
|
|
96
96
|
"import-fresh": "^4.0.0",
|
|
@@ -103,24 +103,24 @@
|
|
|
103
103
|
"node": ">=22.18.0"
|
|
104
104
|
},
|
|
105
105
|
"devDependencies": {
|
|
106
|
-
"@cspell/cspell-tools": "10.
|
|
107
|
-
"@cspell/dict-cpp": "^7.0
|
|
106
|
+
"@cspell/cspell-tools": "10.1.1",
|
|
107
|
+
"@cspell/dict-cpp": "^7.1.0",
|
|
108
108
|
"@cspell/dict-csharp": "^4.0.8",
|
|
109
|
-
"@cspell/dict-css": "^4.1.
|
|
110
|
-
"@cspell/dict-en_us": "^4.4.
|
|
109
|
+
"@cspell/dict-css": "^4.1.2",
|
|
110
|
+
"@cspell/dict-en_us": "^4.4.36",
|
|
111
111
|
"@cspell/dict-fa-ir": "^4.0.5",
|
|
112
112
|
"@cspell/dict-fr-fr": "^2.3.2",
|
|
113
|
-
"@cspell/dict-html": "^4.0.
|
|
113
|
+
"@cspell/dict-html": "^4.0.16",
|
|
114
114
|
"@cspell/dict-nl-nl": "^2.4.2",
|
|
115
|
-
"@cspell/dict-python": "^4.
|
|
115
|
+
"@cspell/dict-python": "^4.4.0",
|
|
116
116
|
"@cspell/dictionary-bundler-plugin": "",
|
|
117
117
|
"@types/configstore": "^6.0.2",
|
|
118
118
|
"comment-json": "^5.0.0",
|
|
119
119
|
"configstore": "^8.0.0",
|
|
120
120
|
"cspell-dict-nl-nl": "^1.1.2",
|
|
121
121
|
"leaked-handles": "^5.2.0",
|
|
122
|
-
"lorem-ipsum": "^
|
|
122
|
+
"lorem-ipsum": "^3.0.0",
|
|
123
123
|
"perf-insight": "^2.0.1"
|
|
124
124
|
},
|
|
125
|
-
"gitHead": "
|
|
125
|
+
"gitHead": "bc3bc22aa1aa1b3073768f2ac9cf0d9a06f65177"
|
|
126
126
|
}
|