cspell-lib 10.0.1 → 10.1.0

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.
@@ -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 includeRanges = calcTextInclusionRanges(this._document.text, validateOptions);
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 includeRanges = calcTextInclusionRanges(this._document.text, validateOptions);
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 includeRanges = TextRange.excludeRanges(TextRange.findMatchingRangesForPatterns(finalIncludeList, text), TextRange.findMatchingRangesForPatterns(ignoreRegExpList, text));
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.0.1",
7
+ "version": "10.1.0",
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.0.1",
79
- "@cspell/cspell-performance-monitor": "10.0.1",
80
- "@cspell/cspell-pipe": "10.0.1",
81
- "@cspell/cspell-resolver": "10.0.1",
82
- "@cspell/cspell-types": "10.0.1",
83
- "@cspell/dynamic-import": "10.0.1",
84
- "@cspell/filetypes": "10.0.1",
85
- "@cspell/rpc": "10.0.1",
86
- "@cspell/strong-weak-map": "10.0.1",
87
- "@cspell/url": "10.0.1",
88
- "cspell-config-lib": "10.0.1",
89
- "cspell-dictionary": "10.0.1",
90
- "cspell-glob": "10.0.1",
91
- "cspell-grammar": "10.0.1",
92
- "cspell-io": "10.0.1",
93
- "cspell-trie-lib": "10.0.1",
78
+ "@cspell/cspell-bundled-dicts": "10.1.0",
79
+ "@cspell/cspell-performance-monitor": "10.1.0",
80
+ "@cspell/cspell-pipe": "10.1.0",
81
+ "@cspell/cspell-resolver": "10.1.0",
82
+ "@cspell/cspell-types": "10.1.0",
83
+ "@cspell/dynamic-import": "10.1.0",
84
+ "@cspell/filetypes": "10.1.0",
85
+ "@cspell/rpc": "10.1.0",
86
+ "@cspell/strong-weak-map": "10.1.0",
87
+ "@cspell/url": "10.1.0",
88
+ "cspell-config-lib": "10.1.0",
89
+ "cspell-dictionary": "10.1.0",
90
+ "cspell-glob": "10.1.0",
91
+ "cspell-grammar": "10.1.0",
92
+ "cspell-io": "10.1.0",
93
+ "cspell-trie-lib": "10.1.0",
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.0.1",
107
- "@cspell/dict-cpp": "^7.0.2",
106
+ "@cspell/cspell-tools": "10.1.0",
107
+ "@cspell/dict-cpp": "^7.1.0",
108
108
  "@cspell/dict-csharp": "^4.0.8",
109
- "@cspell/dict-css": "^4.1.1",
110
- "@cspell/dict-en_us": "^4.4.33",
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.15",
113
+ "@cspell/dict-html": "^4.0.16",
114
114
  "@cspell/dict-nl-nl": "^2.4.2",
115
- "@cspell/dict-python": "^4.2.26",
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": "^2.0.10",
122
+ "lorem-ipsum": "^3.0.0",
123
123
  "perf-insight": "^2.0.1"
124
124
  },
125
- "gitHead": "0f43abf29e5da0ecbcb08214055cdc1e3267c3ea"
125
+ "gitHead": "401518c5e37c06fb406aedadb3fc7a1c27eca8e6"
126
126
  }