cspell-lib 8.13.0 → 8.13.2
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/{esm → lib}/Settings/Controller/configLoader/configLoader.js +1 -1
- package/dist/{esm → lib}/Settings/DefaultSettings.js +1 -1
- package/dist/{lib-cjs/pkg-info.d.cts → lib/pkg-info.d.mts} +1 -1
- package/dist/lib/pkg-info.mjs +15 -0
- package/dist/{esm → lib}/textValidation/ValidationTypes.d.ts +2 -0
- package/dist/lib/textValidation/isWordValid.d.ts +11 -0
- package/dist/lib/textValidation/lineValidatorFactory.js +271 -0
- package/dist/{esm → lib}/util/TextRange.d.ts +3 -8
- package/dist/{esm → lib}/util/TextRange.js +43 -34
- package/dist/{esm → lib}/util/resolveFile.js +1 -1
- package/dist/{esm → lib}/util/text.d.ts +6 -1
- package/dist/{esm → lib}/util/text.js +19 -14
- package/dist/{esm → lib}/util/textRegex.d.ts +2 -0
- package/dist/{esm → lib}/util/textRegex.js +3 -1
- package/dist/{esm → lib}/util/url.js +1 -1
- package/dist/{esm → lib}/util/wordSplitter.d.ts +1 -1
- package/dist/{esm → lib}/util/wordSplitter.js +4 -4
- package/dist/lib/util/wordSplitter.perf.d.ts +2 -0
- package/dist/lib/util/wordSplitter.perf.js +125 -0
- package/package.json +26 -26
- package/dist/esm/textValidation/isWordValid.d.ts +0 -9
- package/dist/esm/textValidation/lineValidatorFactory.js +0 -128
- package/dist/lib-cjs/index.cjs +0 -10
- package/dist/lib-cjs/index.d.cts +0 -6
- package/dist/lib-cjs/pkg-info.cjs +0 -7
- /package/dist/{esm → lib}/Cache/cspell.cache.d.ts +0 -0
- /package/dist/{esm → lib}/Cache/cspell.cache.js +0 -0
- /package/dist/{esm → lib}/Cache/index.d.ts +0 -0
- /package/dist/{esm → lib}/Cache/index.js +0 -0
- /package/dist/{esm → lib}/Document/Document.d.ts +0 -0
- /package/dist/{esm → lib}/Document/Document.js +0 -0
- /package/dist/{esm → lib}/Document/index.d.ts +0 -0
- /package/dist/{esm → lib}/Document/index.js +0 -0
- /package/dist/{esm → lib}/Document/isBinaryDoc.d.ts +0 -0
- /package/dist/{esm → lib}/Document/isBinaryDoc.js +0 -0
- /package/dist/{esm → lib}/Document/normalizeLanguageIds.d.ts +0 -0
- /package/dist/{esm → lib}/Document/normalizeLanguageIds.js +0 -0
- /package/dist/{esm → lib}/Document/resolveDocument.d.ts +0 -0
- /package/dist/{esm → lib}/Document/resolveDocument.js +0 -0
- /package/dist/{esm → lib}/FeatureFlags/FeatureFlags.d.ts +0 -0
- /package/dist/{esm → lib}/FeatureFlags/FeatureFlags.js +0 -0
- /package/dist/{esm → lib}/FeatureFlags/index.d.ts +0 -0
- /package/dist/{esm → lib}/FeatureFlags/index.js +0 -0
- /package/dist/{esm → lib}/LanguageIds.d.ts +0 -0
- /package/dist/{esm → lib}/LanguageIds.js +0 -0
- /package/dist/{esm → lib}/Models/CSpellSettingsInternalDef.d.ts +0 -0
- /package/dist/{esm → lib}/Models/CSpellSettingsInternalDef.js +0 -0
- /package/dist/{esm → lib}/Models/PatternRegExp.d.ts +0 -0
- /package/dist/{esm → lib}/Models/PatternRegExp.js +0 -0
- /package/dist/{esm → lib}/Models/Suggestion.d.ts +0 -0
- /package/dist/{esm → lib}/Models/Suggestion.js +0 -0
- /package/dist/{esm → lib}/Models/TextDocument.d.ts +0 -0
- /package/dist/{esm → lib}/Models/TextDocument.js +0 -0
- /package/dist/{esm → lib}/Models/ValidationIssue.d.ts +0 -0
- /package/dist/{esm → lib}/Models/ValidationIssue.js +0 -0
- /package/dist/{esm → lib}/Models/ValidationResult.d.ts +0 -0
- /package/dist/{esm → lib}/Models/ValidationResult.js +0 -0
- /package/dist/{esm → lib}/Settings/CSpellSettingsServer.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/CSpellSettingsServer.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/ImportError.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/ImportError.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/PnPSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/PnPSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configLoader.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configLocations.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configLocations.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configSearch.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configSearch.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configToRawSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/configToRawSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/defaultConfigLoader.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/defaultConfigLoader.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/defaultSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/defaultSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/extractImportErrors.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/extractImportErrors.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/index.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/index.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/normalizeRawSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/normalizeRawSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/readSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/readSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/readSettingsFiles.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/readSettingsFiles.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/toGlobDef.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/toGlobDef.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/types.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/configLoader/types.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/index.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/index.js +0 -0
- /package/dist/{esm → lib}/Settings/Controller/pnpLoader.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/Controller/pnpLoader.js +0 -0
- /package/dist/{esm → lib}/Settings/DefaultSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/DictionaryReferenceCollection.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/DictionaryReferenceCollection.js +0 -0
- /package/dist/{esm → lib}/Settings/DictionarySettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/DictionarySettings.js +0 -0
- /package/dist/{esm → lib}/Settings/GlobalSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/GlobalSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/InDocSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/InDocSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/LanguageSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/LanguageSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/RegExpPatterns.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/RegExpPatterns.js +0 -0
- /package/dist/{esm → lib}/Settings/TextDocumentSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/TextDocumentSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/calcOverrideSettings.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/calcOverrideSettings.js +0 -0
- /package/dist/{esm → lib}/Settings/cfgStore.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/cfgStore.js +0 -0
- /package/dist/{esm → lib}/Settings/checkFilenameMatchesGlob.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/checkFilenameMatchesGlob.js +0 -0
- /package/dist/{esm → lib}/Settings/constants.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/constants.js +0 -0
- /package/dist/{esm → lib}/Settings/index.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/index.js +0 -0
- /package/dist/{esm → lib}/Settings/index.link.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/index.link.js +0 -0
- /package/dist/{esm → lib}/Settings/link.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/link.js +0 -0
- /package/dist/{esm → lib}/Settings/mergeCache.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/mergeCache.js +0 -0
- /package/dist/{esm → lib}/Settings/mergeList.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/mergeList.js +0 -0
- /package/dist/{esm → lib}/Settings/patterns.d.ts +0 -0
- /package/dist/{esm → lib}/Settings/patterns.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/Dictionaries.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/Dictionaries.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryController/DictionaryLoader.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryController/DictionaryLoader.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryController/index.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryController/index.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryLoader.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/DictionaryLoader.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SpellingDictionary.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SpellingDictionary.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SpellingDictionaryError.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SpellingDictionaryError.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/SuggestionCollector.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/SuggestionCollector.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/entities.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/entities.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/helpers.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/helpers.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/suggest.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/SuggestExperimental/suggest.js +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/index.d.ts +0 -0
- /package/dist/{esm → lib}/SpellingDictionary/index.js +0 -0
- /package/dist/{esm → lib}/clearCachedFiles.d.ts +0 -0
- /package/dist/{esm → lib}/clearCachedFiles.js +0 -0
- /package/dist/{esm → lib}/events/events.d.ts +0 -0
- /package/dist/{esm → lib}/events/events.js +0 -0
- /package/dist/{esm → lib}/events/index.d.ts +0 -0
- /package/dist/{esm → lib}/events/index.js +0 -0
- /package/dist/{esm → lib}/exclusionHelper.d.ts +0 -0
- /package/dist/{esm → lib}/exclusionHelper.js +0 -0
- /package/dist/{esm → lib}/fileSystem.d.ts +0 -0
- /package/dist/{esm → lib}/fileSystem.js +0 -0
- /package/dist/{esm → lib}/getDictionary.d.ts +0 -0
- /package/dist/{esm → lib}/getDictionary.js +0 -0
- /package/dist/{esm → lib}/globs/checkFilenameMatchesGlob.d.ts +0 -0
- /package/dist/{esm → lib}/globs/checkFilenameMatchesGlob.js +0 -0
- /package/dist/{esm → lib}/globs/getGlobMatcher.d.ts +0 -0
- /package/dist/{esm → lib}/globs/getGlobMatcher.js +0 -0
- /package/dist/{esm → lib}/index.d.ts +0 -0
- /package/dist/{esm → lib}/index.js +0 -0
- /package/dist/{esm → lib}/perf/index.d.ts +0 -0
- /package/dist/{esm → lib}/perf/index.js +0 -0
- /package/dist/{esm → lib}/perf/perf.d.ts +0 -0
- /package/dist/{esm → lib}/perf/perf.js +0 -0
- /package/dist/{esm → lib}/perf/timer.d.ts +0 -0
- /package/dist/{esm → lib}/perf/timer.js +0 -0
- /package/dist/{esm → lib}/spellCheckFile.d.ts +0 -0
- /package/dist/{esm → lib}/spellCheckFile.js +0 -0
- /package/dist/{esm → lib}/suggestions.d.ts +0 -0
- /package/dist/{esm → lib}/suggestions.js +0 -0
- /package/dist/{esm → lib}/textValidation/ValidateTextOptions.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/ValidateTextOptions.js +0 -0
- /package/dist/{esm → lib}/textValidation/ValidationTypes.js +0 -0
- /package/dist/{esm → lib}/textValidation/checkText.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/checkText.js +0 -0
- /package/dist/{esm → lib}/textValidation/defaultConstants.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/defaultConstants.js +0 -0
- /package/dist/{esm → lib}/textValidation/determineTextDocumentSettings.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/determineTextDocumentSettings.js +0 -0
- /package/dist/{esm → lib}/textValidation/docValidator.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/docValidator.js +0 -0
- /package/dist/{esm → lib}/textValidation/index.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/index.js +0 -0
- /package/dist/{esm → lib}/textValidation/isWordValid.js +0 -0
- /package/dist/{esm → lib}/textValidation/lineValidatorFactory.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/parsedText.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/parsedText.js +0 -0
- /package/dist/{esm → lib}/textValidation/settingsToValidateOptions.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/settingsToValidateOptions.js +0 -0
- /package/dist/{esm → lib}/textValidation/textValidator.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/textValidator.js +0 -0
- /package/dist/{esm → lib}/textValidation/traceWord.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/traceWord.js +0 -0
- /package/dist/{esm → lib}/textValidation/validator.d.ts +0 -0
- /package/dist/{esm → lib}/textValidation/validator.js +0 -0
- /package/dist/{esm → lib}/trace.d.ts +0 -0
- /package/dist/{esm → lib}/trace.js +0 -0
- /package/dist/{esm → lib}/util/AutoResolve.d.ts +0 -0
- /package/dist/{esm → lib}/util/AutoResolve.js +0 -0
- /package/dist/{esm → lib}/util/AutoResolveLRUCache.d.ts +0 -0
- /package/dist/{esm → lib}/util/AutoResolveLRUCache.js +0 -0
- /package/dist/{esm → lib}/util/Comparable.d.ts +0 -0
- /package/dist/{esm → lib}/util/Comparable.js +0 -0
- /package/dist/{esm → lib}/util/FreqCounter.d.ts +0 -0
- /package/dist/{esm → lib}/util/FreqCounter.js +0 -0
- /package/dist/{esm → lib}/util/IterableLike.d.ts +0 -0
- /package/dist/{esm → lib}/util/IterableLike.js +0 -0
- /package/dist/{esm → lib}/util/MinHeapQueue.d.ts +0 -0
- /package/dist/{esm → lib}/util/MinHeapQueue.js +0 -0
- /package/dist/{esm → lib}/util/PairingHeap.d.ts +0 -0
- /package/dist/{esm → lib}/util/PairingHeap.js +0 -0
- /package/dist/{esm → lib}/util/TextMap.d.ts +0 -0
- /package/dist/{esm → lib}/util/TextMap.js +0 -0
- /package/dist/{esm → lib}/util/Uri.d.ts +0 -0
- /package/dist/{esm → lib}/util/Uri.js +0 -0
- /package/dist/{esm → lib}/util/errors.d.ts +0 -0
- /package/dist/{esm → lib}/util/errors.js +0 -0
- /package/dist/{esm → lib}/util/fileReader.d.ts +0 -0
- /package/dist/{esm → lib}/util/fileReader.js +0 -0
- /package/dist/{esm → lib}/util/findUp.d.ts +0 -0
- /package/dist/{esm → lib}/util/findUp.js +0 -0
- /package/dist/{esm → lib}/util/findUpFromUrl.d.ts +0 -0
- /package/dist/{esm → lib}/util/findUpFromUrl.js +0 -0
- /package/dist/{esm → lib}/util/iterableIteratorLib.d.ts +0 -0
- /package/dist/{esm → lib}/util/iterableIteratorLib.js +0 -0
- /package/dist/{esm → lib}/util/logger.d.ts +0 -0
- /package/dist/{esm → lib}/util/logger.js +0 -0
- /package/dist/{esm → lib}/util/memorizeLastCall.d.ts +0 -0
- /package/dist/{esm → lib}/util/memorizeLastCall.js +0 -0
- /package/dist/{esm → lib}/util/memorizerWeak.d.ts +0 -0
- /package/dist/{esm → lib}/util/memorizerWeak.js +0 -0
- /package/dist/{esm → lib}/util/regexHelper.d.ts +0 -0
- /package/dist/{esm → lib}/util/regexHelper.js +0 -0
- /package/dist/{esm → lib}/util/repMap.d.ts +0 -0
- /package/dist/{esm → lib}/util/repMap.js +0 -0
- /package/dist/{esm → lib}/util/resolveFile.d.ts +0 -0
- /package/dist/{esm → lib}/util/search.d.ts +0 -0
- /package/dist/{esm → lib}/util/search.js +0 -0
- /package/dist/{esm → lib}/util/simpleCache.d.ts +0 -0
- /package/dist/{esm → lib}/util/simpleCache.js +0 -0
- /package/dist/{esm → lib}/util/templates.d.ts +0 -0
- /package/dist/{esm → lib}/util/templates.js +0 -0
- /package/dist/{esm → lib}/util/types.d.ts +0 -0
- /package/dist/{esm → lib}/util/types.js +0 -0
- /package/dist/{esm → lib}/util/url.d.ts +0 -0
- /package/dist/{esm → lib}/util/util.d.ts +0 -0
- /package/dist/{esm → lib}/util/util.js +0 -0
- /package/dist/{esm → lib}/validator.d.ts +0 -0
- /package/dist/{esm → lib}/validator.js +0 -0
- /package/dist/{esm → lib}/wordListHelper.d.ts +0 -0
- /package/dist/{esm → lib}/wordListHelper.js +0 -0
|
@@ -224,7 +224,7 @@ function splitIntoWords(lineSeg, breaks, has) {
|
|
|
224
224
|
}
|
|
225
225
|
return br.breaks.map(c);
|
|
226
226
|
}
|
|
227
|
-
function
|
|
227
|
+
function checkTextOffset(text, offset) {
|
|
228
228
|
const valid = has({ text, offset });
|
|
229
229
|
return {
|
|
230
230
|
text,
|
|
@@ -282,7 +282,7 @@ function splitIntoWords(lineSeg, breaks, has) {
|
|
|
282
282
|
// yes
|
|
283
283
|
const i = best.bp[0];
|
|
284
284
|
const j = best.bp[1];
|
|
285
|
-
const t = i > best.i ?
|
|
285
|
+
const t = i > best.i ? checkTextOffset(text.slice(best.i, i), best.i) : undefined;
|
|
286
286
|
const cost = !t || t.isFound ? 0 : t.text.length;
|
|
287
287
|
const mc = maxIndex - j;
|
|
288
288
|
best.c += cost;
|
|
@@ -304,12 +304,12 @@ function splitIntoWords(lineSeg, breaks, has) {
|
|
|
304
304
|
const c = makeCandidates(best.p, best.i, best.bi + 1, best.c);
|
|
305
305
|
candidates.append(c);
|
|
306
306
|
if (!c.length) {
|
|
307
|
-
const t = maxIndex > best.i ?
|
|
307
|
+
const t = maxIndex > best.i ? checkTextOffset(text.slice(best.i, maxIndex), best.i) : undefined;
|
|
308
308
|
const cost = !t || t.isFound ? 0 : t.text.length;
|
|
309
309
|
best.c += cost;
|
|
310
310
|
best.ec = best.c;
|
|
311
311
|
best.text = t;
|
|
312
|
-
const segText = t || best.p?.text ||
|
|
312
|
+
const segText = t || best.p?.text || checkTextOffset('', best.i);
|
|
313
313
|
const can = t ? { ...best, text: segText } : { ...best, ...best.p, text: segText };
|
|
314
314
|
const f = addToKnownPaths(can, undefined);
|
|
315
315
|
bestPath = !bestPath || (f && f.c < bestPath.c) ? f : bestPath;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { extname } from 'node:path/posix';
|
|
3
|
+
import { suite } from 'perf-insight';
|
|
4
|
+
import { extractPossibleWordsFromTextOffset, extractWordsFromCode, extractWordsFromText, matchStringToTextOffset, splitCamelCaseWordWithOffset, textOffset, } from './text.js';
|
|
5
|
+
import { regExWordsAndDigits } from './textRegex.js';
|
|
6
|
+
const regExpWord = /\b[\w\p{L}\p{M}]+\b/gu;
|
|
7
|
+
suite('wordSplitter', async (test) => {
|
|
8
|
+
const lines = await sampleLines();
|
|
9
|
+
const iterations = 1;
|
|
10
|
+
test('baseline: matchAll /[\\w\\p{L}\\p{M}]+/gu', () => {
|
|
11
|
+
const s = [];
|
|
12
|
+
const _regExpWord = regExpWord;
|
|
13
|
+
for (let i = iterations; i > 0; --i) {
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
for (const m of line.matchAll(_regExpWord)) {
|
|
16
|
+
s.push({ text: m[0], offset: m.index });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return s;
|
|
21
|
+
});
|
|
22
|
+
test('baseline: matchAll non-space /\\S+/g', () => {
|
|
23
|
+
const s = [];
|
|
24
|
+
const regExp = /\S+/g;
|
|
25
|
+
for (let i = iterations; i > 0; --i) {
|
|
26
|
+
for (const line of lines) {
|
|
27
|
+
s.push(...[...line.matchAll(regExp)].map((a) => ({ text: a[0], offset: a.index })));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return s;
|
|
31
|
+
});
|
|
32
|
+
test('baseline: matchAll non-special', () => {
|
|
33
|
+
const s = [];
|
|
34
|
+
const regExp = /[^\s();:{}[\]*&^%$#@!~"?/\\,<>+=]+/g;
|
|
35
|
+
for (let i = iterations; i > 0; --i) {
|
|
36
|
+
for (const line of lines) {
|
|
37
|
+
s.push(...[...line.matchAll(regExp)].map((a) => ({ text: a[0], offset: a.index })));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return s;
|
|
41
|
+
});
|
|
42
|
+
test('baseline: matchAll regExWordsAndDigits', () => {
|
|
43
|
+
const s = [];
|
|
44
|
+
const regExp = regExWordsAndDigits;
|
|
45
|
+
for (let i = iterations; i > 0; --i) {
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
s.push(...[...line.matchAll(regExp)].map((a) => ({ text: a[0], offset: a.index })));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return s;
|
|
51
|
+
});
|
|
52
|
+
test('baseline: matchAll regExWordsAndDigits matchStringToTextOffset', () => {
|
|
53
|
+
const s = [];
|
|
54
|
+
const regExp = regExWordsAndDigits;
|
|
55
|
+
for (let i = iterations; i > 0; --i) {
|
|
56
|
+
for (const line of lines) {
|
|
57
|
+
s.push(...matchStringToTextOffset(regExp, line));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return s;
|
|
61
|
+
});
|
|
62
|
+
test('matchAll into possible words', () => {
|
|
63
|
+
const s = [];
|
|
64
|
+
const regExpMaybeWord = /[^\s();:{}[\]*&^%$#@!~"?/\\,<>+=]+/g;
|
|
65
|
+
const _regExpWord = regExpWord;
|
|
66
|
+
for (let i = iterations; i > 0; --i) {
|
|
67
|
+
for (const line of lines) {
|
|
68
|
+
for (const m of line.matchAll(regExpMaybeWord)) {
|
|
69
|
+
const index = m.index;
|
|
70
|
+
for (const words of m[0].matchAll(_regExpWord)) {
|
|
71
|
+
s.push({ text: words[0], offset: index + words.index });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return s;
|
|
77
|
+
});
|
|
78
|
+
test('extractWordsFromText', () => {
|
|
79
|
+
const s = [];
|
|
80
|
+
for (let i = iterations; i > 0; --i) {
|
|
81
|
+
for (const line of lines) {
|
|
82
|
+
s.push(...extractWordsFromText(line));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return s;
|
|
86
|
+
});
|
|
87
|
+
test('extractPossibleWordsFromTextOffset', () => {
|
|
88
|
+
const s = [];
|
|
89
|
+
for (let i = iterations; i > 0; --i) {
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
s.push(...extractPossibleWordsFromTextOffset(textOffset(line)));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return s;
|
|
95
|
+
});
|
|
96
|
+
test('extractPossibleWordsFromTextOffset splitCamelCaseWordWithOffset', () => {
|
|
97
|
+
const s = [];
|
|
98
|
+
for (let i = iterations; i > 0; --i) {
|
|
99
|
+
for (const line of lines) {
|
|
100
|
+
for (const wo of extractPossibleWordsFromTextOffset(textOffset(line))) {
|
|
101
|
+
for (const cWord of splitCamelCaseWordWithOffset(wo)) {
|
|
102
|
+
s.push(cWord);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return s;
|
|
108
|
+
});
|
|
109
|
+
test('extractWordsFromCode', () => {
|
|
110
|
+
const s = [];
|
|
111
|
+
for (let i = iterations; i > 0; --i) {
|
|
112
|
+
for (const line of lines) {
|
|
113
|
+
s.push(...extractWordsFromCode(line));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return s;
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
async function sampleLines() {
|
|
120
|
+
const ext = extname(new URL(import.meta.url).pathname);
|
|
121
|
+
const url = new URL('wordSplitter.test' + ext, import.meta.url);
|
|
122
|
+
const context = await readFile(url, 'utf8');
|
|
123
|
+
return context.replaceAll('\r\n', '\n').replaceAll('\r', '\n').split('\n');
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=wordSplitter.perf.js.map
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cspell-lib",
|
|
3
|
-
"version": "8.13.
|
|
3
|
+
"version": "8.13.2",
|
|
4
4
|
"description": "A library of useful functions used across various cspell tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
|
-
"types": "dist/
|
|
8
|
-
"module": "dist/
|
|
7
|
+
"types": "dist/lib/index.d.ts",
|
|
8
|
+
"module": "dist/lib/index.js",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"import": "./dist/
|
|
11
|
+
"import": "./dist/lib/index.js"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
@@ -24,17 +24,16 @@
|
|
|
24
24
|
"scripts": {
|
|
25
25
|
"clean": "shx rm -rf dist temp coverage \"*.tsbuildInfo\"",
|
|
26
26
|
"clean-build": "pnpm clean && pnpm build",
|
|
27
|
-
"build": "tsc -
|
|
27
|
+
"build": "tsc -p . && pnpm run build:api",
|
|
28
28
|
"build:api": "rollup -c api/rollup.config.mjs",
|
|
29
|
-
"
|
|
30
|
-
"build:lib": "tsc -b src/lib/tsconfig.json -f",
|
|
31
|
-
"watch": "tsc -b . --watch -f",
|
|
29
|
+
"watch": "tsc -p . --watch",
|
|
32
30
|
"coverage": "vitest run --coverage --pool=forks",
|
|
33
31
|
"test-watch": "vitest",
|
|
34
32
|
"prepublishOnly": "pnpm run clean-build",
|
|
35
33
|
"#test": "vitest run --reporter=hanging-process --reporter=default",
|
|
36
34
|
"test": "vitest run --pool=forks",
|
|
37
|
-
"test:update-snapshot": "vitest run -u"
|
|
35
|
+
"test:update-snapshot": "vitest run -u",
|
|
36
|
+
"test:perf": "NODE_ENV=production insight --register ts-node/esm --file \"**/*.perf.{mts,ts}\""
|
|
38
37
|
},
|
|
39
38
|
"repository": {
|
|
40
39
|
"type": "git",
|
|
@@ -59,27 +58,27 @@
|
|
|
59
58
|
},
|
|
60
59
|
"homepage": "https://github.com/streetsidesoftware/cspell#readme",
|
|
61
60
|
"dependencies": {
|
|
62
|
-
"@cspell/cspell-bundled-dicts": "8.13.
|
|
63
|
-
"@cspell/cspell-pipe": "8.13.
|
|
64
|
-
"@cspell/cspell-resolver": "8.13.
|
|
65
|
-
"@cspell/cspell-types": "8.13.
|
|
66
|
-
"@cspell/dynamic-import": "8.13.
|
|
67
|
-
"@cspell/strong-weak-map": "8.13.
|
|
68
|
-
"@cspell/url": "8.13.
|
|
61
|
+
"@cspell/cspell-bundled-dicts": "8.13.2",
|
|
62
|
+
"@cspell/cspell-pipe": "8.13.2",
|
|
63
|
+
"@cspell/cspell-resolver": "8.13.2",
|
|
64
|
+
"@cspell/cspell-types": "8.13.2",
|
|
65
|
+
"@cspell/dynamic-import": "8.13.2",
|
|
66
|
+
"@cspell/strong-weak-map": "8.13.2",
|
|
67
|
+
"@cspell/url": "8.13.2",
|
|
69
68
|
"clear-module": "^4.1.2",
|
|
70
69
|
"comment-json": "^4.2.4",
|
|
71
|
-
"cspell-config-lib": "8.13.
|
|
72
|
-
"cspell-dictionary": "8.13.
|
|
73
|
-
"cspell-glob": "8.13.
|
|
74
|
-
"cspell-grammar": "8.13.
|
|
75
|
-
"cspell-io": "8.13.
|
|
76
|
-
"cspell-trie-lib": "8.13.
|
|
70
|
+
"cspell-config-lib": "8.13.2",
|
|
71
|
+
"cspell-dictionary": "8.13.2",
|
|
72
|
+
"cspell-glob": "8.13.2",
|
|
73
|
+
"cspell-grammar": "8.13.2",
|
|
74
|
+
"cspell-io": "8.13.2",
|
|
75
|
+
"cspell-trie-lib": "8.13.2",
|
|
77
76
|
"env-paths": "^3.0.0",
|
|
78
77
|
"fast-equals": "^5.0.1",
|
|
79
78
|
"gensequence": "^7.0.0",
|
|
80
79
|
"import-fresh": "^3.3.0",
|
|
81
80
|
"resolve-from": "^5.0.0",
|
|
82
|
-
"vscode-languageserver-textdocument": "^1.0.
|
|
81
|
+
"vscode-languageserver-textdocument": "^1.0.12",
|
|
83
82
|
"vscode-uri": "^3.0.8",
|
|
84
83
|
"xdg-basedir": "^5.1.0"
|
|
85
84
|
},
|
|
@@ -94,12 +93,13 @@
|
|
|
94
93
|
"@cspell/dict-fr-fr": "^2.2.2",
|
|
95
94
|
"@cspell/dict-html": "^4.0.5",
|
|
96
95
|
"@cspell/dict-nl-nl": "^2.3.0",
|
|
97
|
-
"@cspell/dict-python": "^4.2.
|
|
96
|
+
"@cspell/dict-python": "^4.2.4",
|
|
98
97
|
"@types/configstore": "^6.0.2",
|
|
99
98
|
"configstore": "^7.0.0",
|
|
100
99
|
"cspell-dict-nl-nl": "^1.1.2",
|
|
101
100
|
"leaked-handles": "^5.2.0",
|
|
102
|
-
"lorem-ipsum": "^2.0.8"
|
|
101
|
+
"lorem-ipsum": "^2.0.8",
|
|
102
|
+
"perf-insight": "^1.2.0"
|
|
103
103
|
},
|
|
104
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "5c9aaf8829991e7d6d37355acb9b9685088bba14"
|
|
105
105
|
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { CachingDictionary } from 'cspell-dictionary';
|
|
2
|
-
import type { TextOffsetRO } from './ValidationTypes.js';
|
|
3
|
-
declare function hasWordCheck(dict: CachingDictionary, word: string): boolean;
|
|
4
|
-
export declare function isWordValidWithEscapeRetry(dict: CachingDictionary, wo: TextOffsetRO, line: TextOffsetRO): boolean;
|
|
5
|
-
export declare const __testing__: {
|
|
6
|
-
hasWordCheck: typeof hasWordCheck;
|
|
7
|
-
};
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=isWordValid.d.ts.map
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { opConcatMap, opFilter, opMap, pipe, toArray } from '@cspell/cspell-pipe/sync';
|
|
2
|
-
import { createCachingDictionary } from 'cspell-dictionary';
|
|
3
|
-
import * as RxPat from '../Settings/RegExpPatterns.js';
|
|
4
|
-
import * as Text from '../util/text.js';
|
|
5
|
-
import { clean } from '../util/util.js';
|
|
6
|
-
import { split } from '../util/wordSplitter.js';
|
|
7
|
-
import { defaultMinWordLength } from './defaultConstants.js';
|
|
8
|
-
import { isWordValidWithEscapeRetry } from './isWordValid.js';
|
|
9
|
-
import { mapRangeBackToOriginalPos } from './parsedText.js';
|
|
10
|
-
export function lineValidatorFactory(sDict, options) {
|
|
11
|
-
const { minWordLength = defaultMinWordLength, flagWords = [], allowCompoundWords = false, ignoreCase = true, } = options;
|
|
12
|
-
const hasWordOptions = {
|
|
13
|
-
ignoreCase,
|
|
14
|
-
useCompounds: allowCompoundWords || undefined, // let the dictionaries decide on useCompounds if allow is false
|
|
15
|
-
};
|
|
16
|
-
const dictCol = createCachingDictionary(sDict, hasWordOptions);
|
|
17
|
-
const setOfFlagWords = new Set(flagWords);
|
|
18
|
-
const setOfKnownSuccessfulWords = new Set();
|
|
19
|
-
const rememberFilter = (fn) => (v) => {
|
|
20
|
-
const keep = fn(v);
|
|
21
|
-
if (!keep) {
|
|
22
|
-
setOfKnownSuccessfulWords.add(v.text);
|
|
23
|
-
}
|
|
24
|
-
return keep;
|
|
25
|
-
};
|
|
26
|
-
const filterAlreadyChecked = (wo) => {
|
|
27
|
-
return !setOfKnownSuccessfulWords.has(wo.text);
|
|
28
|
-
};
|
|
29
|
-
function testForFlaggedWord(wo) {
|
|
30
|
-
const text = wo.text;
|
|
31
|
-
return setOfFlagWords.has(text) || setOfFlagWords.has(text.toLowerCase()) || dictCol.isForbidden(text);
|
|
32
|
-
}
|
|
33
|
-
function isWordIgnored(word) {
|
|
34
|
-
return dictCol.isNoSuggestWord(word);
|
|
35
|
-
}
|
|
36
|
-
function getSuggestions(word) {
|
|
37
|
-
return dictCol.getPreferredSuggestions(word);
|
|
38
|
-
}
|
|
39
|
-
function isWordFlagged(word) {
|
|
40
|
-
const isIgnored = isWordIgnored(word.text);
|
|
41
|
-
const isFlagged = !isIgnored && testForFlaggedWord(word);
|
|
42
|
-
return isFlagged;
|
|
43
|
-
}
|
|
44
|
-
function annotateIsFlagged(word) {
|
|
45
|
-
word.isFlagged = isWordFlagged(word);
|
|
46
|
-
return word;
|
|
47
|
-
}
|
|
48
|
-
function annotateIssue(issue) {
|
|
49
|
-
const sugs = getSuggestions(issue.text);
|
|
50
|
-
if (sugs && sugs.length) {
|
|
51
|
-
issue.suggestionsEx = sugs;
|
|
52
|
-
}
|
|
53
|
-
return issue;
|
|
54
|
-
}
|
|
55
|
-
function checkWord(word) {
|
|
56
|
-
const isIgnored = isWordIgnored(word.text);
|
|
57
|
-
const { isFlagged = !isIgnored && testForFlaggedWord(word) } = word;
|
|
58
|
-
const isFound = isFlagged ? undefined : isIgnored || isWordValidWithEscapeRetry(dictCol, word, word.line);
|
|
59
|
-
return clean({ ...word, isFlagged, isFound });
|
|
60
|
-
}
|
|
61
|
-
const fn = (lineSegment) => {
|
|
62
|
-
function splitterIsValid(word) {
|
|
63
|
-
return (setOfKnownSuccessfulWords.has(word.text) ||
|
|
64
|
-
(!testForFlaggedWord(word) && isWordValidWithEscapeRetry(dictCol, word, lineSegment.line)));
|
|
65
|
-
}
|
|
66
|
-
function checkFullWord(vr) {
|
|
67
|
-
if (vr.isFlagged) {
|
|
68
|
-
return [vr];
|
|
69
|
-
}
|
|
70
|
-
const codeWordResults = toArray(pipe(Text.extractWordsFromCodeTextOffset(vr), opFilter(filterAlreadyChecked), opMap((t) => ({ ...t, line: vr.line })), opMap(annotateIsFlagged), opFilter(rememberFilter((wo) => wo.text.length >= minWordLength || !!wo.isFlagged)), opMap((wo) => (wo.isFlagged ? wo : checkWord(wo))), opFilter(rememberFilter((wo) => wo.isFlagged || !wo.isFound)), opFilter(rememberFilter((wo) => !RxPat.regExRepeatedChar.test(wo.text))),
|
|
71
|
-
// get back the original text.
|
|
72
|
-
opMap((wo) => ({
|
|
73
|
-
...wo,
|
|
74
|
-
text: Text.extractText(lineSegment.segment, wo.offset, wo.offset + wo.text.length),
|
|
75
|
-
}))));
|
|
76
|
-
if (!codeWordResults.length || isWordIgnored(vr.text) || checkWord(vr).isFound) {
|
|
77
|
-
rememberFilter((_) => false)(vr);
|
|
78
|
-
return [];
|
|
79
|
-
}
|
|
80
|
-
return codeWordResults;
|
|
81
|
-
}
|
|
82
|
-
function checkPossibleWords(possibleWord) {
|
|
83
|
-
if (isWordFlagged(possibleWord)) {
|
|
84
|
-
const vr = {
|
|
85
|
-
...possibleWord,
|
|
86
|
-
line: lineSegment.line,
|
|
87
|
-
isFlagged: true,
|
|
88
|
-
};
|
|
89
|
-
return [vr];
|
|
90
|
-
}
|
|
91
|
-
const mismatches = toArray(pipe(Text.extractWordsFromTextOffset(possibleWord), opFilter((wo) => filterAlreadyChecked(wo)), opMap((wo) => ((wo.line = lineSegment.line), wo)), opMap(annotateIsFlagged), opFilter(rememberFilter((wo) => wo.text.length >= minWordLength || !!wo.isFlagged)), opConcatMap(checkFullWord)));
|
|
92
|
-
if (mismatches.length) {
|
|
93
|
-
// Try the more expensive word splitter
|
|
94
|
-
const splitResult = split(lineSegment.segment, possibleWord.offset, splitterIsValid);
|
|
95
|
-
const nonMatching = splitResult.words.filter((w) => !w.isFound);
|
|
96
|
-
if (nonMatching.length < mismatches.length) {
|
|
97
|
-
return nonMatching.map((w) => ({ ...w, line: lineSegment.line })).map(annotateIsFlagged);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return mismatches;
|
|
101
|
-
}
|
|
102
|
-
const checkedPossibleWords = pipe(Text.extractPossibleWordsFromTextOffset(lineSegment.segment), opFilter(filterAlreadyChecked), opConcatMap(checkPossibleWords), opMap(annotateIssue));
|
|
103
|
-
return checkedPossibleWords;
|
|
104
|
-
};
|
|
105
|
-
return { fn, dict: dictCol };
|
|
106
|
-
}
|
|
107
|
-
export function textValidatorFactory(dict, options) {
|
|
108
|
-
const lineValidator = lineValidatorFactory(dict, options);
|
|
109
|
-
const lineValidatorFn = lineValidator.fn;
|
|
110
|
-
function validate(pText) {
|
|
111
|
-
const { text, range: srcRange, map } = pText;
|
|
112
|
-
const srcOffset = srcRange[0];
|
|
113
|
-
const segment = { text, offset: 0 };
|
|
114
|
-
const lineSegment = { line: segment, segment };
|
|
115
|
-
function mapBackToOriginSimple(vr) {
|
|
116
|
-
const { text, offset, isFlagged, isFound, suggestionsEx } = vr;
|
|
117
|
-
const r = mapRangeBackToOriginalPos([offset, offset + text.length], map);
|
|
118
|
-
const range = [r[0] + srcOffset, r[1] + srcOffset];
|
|
119
|
-
return { text, range, isFlagged, isFound, suggestionsEx };
|
|
120
|
-
}
|
|
121
|
-
return [...lineValidatorFn(lineSegment)].map(mapBackToOriginSimple);
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
validate,
|
|
125
|
-
lineValidator,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=lineValidatorFactory.js.map
|
package/dist/lib-cjs/index.cjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* This module contains CJS only files.
|
|
4
|
-
* It includes files that use 3rd part libs that can only be CJS due to their exports.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.srcDirectory = void 0;
|
|
8
|
-
var pkg_info_cjs_1 = require("./pkg-info.cjs");
|
|
9
|
-
Object.defineProperty(exports, "srcDirectory", { enumerable: true, get: function () { return pkg_info_cjs_1.srcDirectory; } });
|
|
10
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/lib-cjs/index.d.cts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.srcDirectory = void 0;
|
|
4
|
-
// import { join } from 'path';
|
|
5
|
-
// export const srcDirectory = join(__dirname, '/');
|
|
6
|
-
exports.srcDirectory = __dirname;
|
|
7
|
-
//# sourceMappingURL=pkg-info.cjs.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|