cspell-lib 6.8.2 → 6.9.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.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolvePatterns = void 0;
4
- const text_1 = require("../util/text");
4
+ const textRegex_1 = require("../util/textRegex");
5
5
  const util_1 = require("../util/util");
6
6
  function resolvePatterns(regExpList = [], patternDefinitions = []) {
7
7
  const patternMap = new Map(patternDefinitions.map((def) => [def.name.toLowerCase(), def.pattern]));
@@ -27,6 +27,6 @@ function resolvePatterns(regExpList = [], patternDefinitions = []) {
27
27
  }
28
28
  exports.resolvePatterns = resolvePatterns;
29
29
  function toRegExp(pattern) {
30
- return pattern instanceof RegExp ? new RegExp(pattern) : (0, text_1.stringToRegExp)(pattern, 'gim', 'g');
30
+ return pattern instanceof RegExp ? new RegExp(pattern) : (0, textRegex_1.stringToRegExp)(pattern, 'gim', 'g');
31
31
  }
32
32
  //# sourceMappingURL=patterns.js.map
@@ -1,4 +1,5 @@
1
1
  import type { TextDocumentOffset, TextOffset } from '@cspell/cspell-types';
2
+ export { stringToRegExp } from './textRegex';
2
3
  export declare function splitCamelCaseWordWithOffset(wo: TextOffset): Array<TextOffset>;
3
4
  /**
4
5
  * Split camelCase words into an array of strings.
@@ -38,7 +39,6 @@ export declare function camelToSnake(word: string): string;
38
39
  export declare function matchCase(example: string, word: string): string;
39
40
  export declare function textOffset(text: string, offset?: number): TextOffset;
40
41
  export declare function extractText(textOffset: TextOffset, startPos: number, endPos: number): string;
41
- export declare function stringToRegExp(pattern: string | RegExp, defaultFlags?: string, forceFlags?: string): RegExp | undefined;
42
42
  export declare function calculateTextDocumentOffsets<T extends TextOffset>(uri: string, doc: string, wordOffsets: T[]): (TextDocumentOffset & T)[];
43
43
  export declare function removeAccents(text: string): string;
44
44
  export declare const __testing__: {
package/dist/util/text.js CHANGED
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.__testing__ = exports.removeAccents = exports.calculateTextDocumentOffsets = exports.stringToRegExp = exports.extractText = exports.textOffset = exports.matchCase = exports.camelToSnake = exports.snakeToCamel = exports.lcFirst = exports.ucFirst = exports.isFirstCharacterLower = exports.isFirstCharacterUpper = exports.isLowerCase = exports.isUpperCase = exports.extractWordsFromCodeTextOffset = exports.extractWordsFromCode = exports.extractPossibleWordsFromTextOffset = exports.cleanTextOffset = exports.cleanText = exports.extractWordsFromTextOffset = exports.extractWordsFromText = exports.extractLinesOfText = exports.matchToTextOffset = exports.matchStringToTextOffset = exports.match = exports.splitCamelCaseWord = exports.splitCamelCaseWordWithOffset = void 0;
3
+ exports.__testing__ = exports.removeAccents = exports.calculateTextDocumentOffsets = exports.extractText = exports.textOffset = exports.matchCase = exports.camelToSnake = exports.snakeToCamel = exports.lcFirst = exports.ucFirst = exports.isFirstCharacterLower = exports.isFirstCharacterUpper = exports.isLowerCase = exports.isUpperCase = exports.extractWordsFromCodeTextOffset = exports.extractWordsFromCode = exports.extractPossibleWordsFromTextOffset = exports.cleanTextOffset = exports.cleanText = exports.extractWordsFromTextOffset = exports.extractWordsFromText = exports.extractLinesOfText = exports.matchToTextOffset = exports.matchStringToTextOffset = exports.match = exports.splitCamelCaseWord = exports.splitCamelCaseWordWithOffset = exports.stringToRegExp = void 0;
4
4
  const cspell_pipe_1 = require("@cspell/cspell-pipe");
5
5
  const gensequence_1 = require("gensequence");
6
6
  const search_1 = require("./search");
7
7
  const textRegex_1 = require("./textRegex");
8
8
  const util_1 = require("./util");
9
+ var textRegex_2 = require("./textRegex");
10
+ Object.defineProperty(exports, "stringToRegExp", { enumerable: true, get: function () { return textRegex_2.stringToRegExp; } });
9
11
  // CSpell:ignore ings ning gimuy tsmerge
10
12
  function splitCamelCaseWordWithOffset(wo) {
11
13
  return splitCamelCaseWord(wo.text).map((0, util_1.scanMap)((last, text) => ({ text, offset: last.offset + last.text.length }), {
@@ -155,25 +157,6 @@ exports.extractText = extractText;
155
157
  function offsetMap(offset) {
156
158
  return (xo) => ({ ...xo, offset: xo.offset + offset });
157
159
  }
158
- function stringToRegExp(pattern, defaultFlags = 'gimu', forceFlags = 'g') {
159
- if (pattern instanceof RegExp) {
160
- return pattern;
161
- }
162
- try {
163
- const [, pat, flag] = [...(pattern.match(textRegex_1.regExMatchRegExParts) || ['', pattern, defaultFlags]), forceFlags];
164
- // Make sure the flags are unique.
165
- const flags = [...new Set(forceFlags + flag)].join('').replace(/[^gimuy]/g, '');
166
- if (pat) {
167
- const regex = new RegExp(pat, flags);
168
- return regex;
169
- }
170
- }
171
- catch (e) {
172
- /* empty */
173
- }
174
- return undefined;
175
- }
176
- exports.stringToRegExp = stringToRegExp;
177
160
  function calculateTextDocumentOffsets(uri, doc, wordOffsets) {
178
161
  const lines = [
179
162
  -1,
@@ -16,4 +16,5 @@ export declare const regExEscapeCharacters: RegExp;
16
16
  export declare const regExDanglingQuote: RegExp;
17
17
  /** Match tailing endings after CAPS words */
18
18
  export declare const regExTrailingEndings: RegExp;
19
+ export declare function stringToRegExp(pattern: string | RegExp, defaultFlags?: string, forceFlags?: string): RegExp | undefined;
19
20
  //# sourceMappingURL=textRegex.d.ts.map
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- // cspell:ignore ings ning gimuy anrvtbf
2
+ // cspell:ignore ings ning gimuy anrvtbf gimuxy
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.regExTrailingEndings = exports.regExDanglingQuote = exports.regExEscapeCharacters = exports.regExAccents = exports.regExMatchRegExParts = exports.regExPossibleWordBreaks = exports.regExAllLower = exports.regExAllUpper = exports.regExFirstUpper = exports.regExIgnoreCharacters = exports.regExWordsAndDigits = exports.regExWords = exports.regExSplitWords2 = exports.regExSplitWords = exports.regExUpperSOrIng = exports.regExLines = void 0;
4
+ exports.stringToRegExp = exports.regExTrailingEndings = exports.regExDanglingQuote = exports.regExEscapeCharacters = exports.regExAccents = exports.regExMatchRegExParts = exports.regExPossibleWordBreaks = exports.regExAllLower = exports.regExAllUpper = exports.regExFirstUpper = exports.regExIgnoreCharacters = exports.regExWordsAndDigits = exports.regExWords = exports.regExSplitWords2 = exports.regExSplitWords = exports.regExUpperSOrIng = exports.regExLines = void 0;
5
5
  exports.regExLines = /.*(\r?\n|$)/g;
6
6
  exports.regExUpperSOrIng = /([\p{Lu}\p{M}]+\\?['’]?(?:s|ing|ies|es|ings|ed|ning))(?!\p{Ll})/gu;
7
7
  exports.regExSplitWords = /(\p{Ll}\p{M}?)(\p{Lu})/gu;
@@ -13,11 +13,118 @@ exports.regExFirstUpper = /^\p{Lu}\p{M}?\p{Ll}+$/u;
13
13
  exports.regExAllUpper = /^(?:\p{Lu}\p{M}?)+$/u;
14
14
  exports.regExAllLower = /^(?:\p{Ll}\p{M}?)+$/u;
15
15
  exports.regExPossibleWordBreaks = /[-_’']/g;
16
- exports.regExMatchRegExParts = /^\/(.*)\/([gimuy]*)$/;
16
+ exports.regExMatchRegExParts = /^\s*\/([\s\S]*?)\/([gimuxy]*)\s*$/;
17
17
  exports.regExAccents = /\p{M}/gu;
18
18
  exports.regExEscapeCharacters = /(?<=\\)[anrvtbf]/gi;
19
19
  /** Matches against leading `'` or `{single letter}'` */
20
20
  exports.regExDanglingQuote = /(?<=(?:^|(?!\p{M})\P{L})(?:\p{L}\p{M}?)?)[']/gu;
21
21
  /** Match tailing endings after CAPS words */
22
22
  exports.regExTrailingEndings = /(?<=(?:\p{Lu}\p{M}?){2})['’]?(?:s|d|ings?|ies|e[ds]?|ning|th|nth)(?!\p{Ll})/gu;
23
+ function stringToRegExp(pattern, defaultFlags = 'gimu', forceFlags = 'g') {
24
+ if (pattern instanceof RegExp) {
25
+ return pattern;
26
+ }
27
+ try {
28
+ const [, pat, flag] = [
29
+ ...(pattern.match(exports.regExMatchRegExParts) || ['', pattern.trim(), defaultFlags]),
30
+ forceFlags,
31
+ ];
32
+ if (pat) {
33
+ const regPattern = flag.includes('x') ? removeVerboseFromRegExp(pat) : pat;
34
+ // Make sure the flags are unique.
35
+ const flags = [...new Set(forceFlags + flag)].join('').replace(/[^gimuy]/g, '');
36
+ const regex = new RegExp(regPattern, flags);
37
+ return regex;
38
+ }
39
+ }
40
+ catch (e) {
41
+ /* empty */
42
+ }
43
+ return undefined;
44
+ }
45
+ exports.stringToRegExp = stringToRegExp;
46
+ const SPACES = {
47
+ ' ': true,
48
+ '\n': true,
49
+ '\r': true,
50
+ '\t': true,
51
+ };
52
+ /**
53
+ * Remove all whitespace and comments from a regexp string. The format follows Pythons Verbose.
54
+ * Note: this is a best attempt. Special cases for comments: `#` and spaces should be proceeded with a `\`
55
+ *
56
+ * All space must be proceeded by a `\` or in a character class `[]`
57
+ *
58
+ * @param pattern - the pattern to clean
59
+ */
60
+ function removeVerboseFromRegExp(pattern) {
61
+ function escape(acc) {
62
+ const char = pattern[acc.idx];
63
+ if (char !== '\\')
64
+ return undefined;
65
+ const next = pattern[++acc.idx];
66
+ acc.idx++;
67
+ if (next === '#') {
68
+ acc.result += '#';
69
+ return acc;
70
+ }
71
+ if (!(next in SPACES)) {
72
+ acc.result += '\\' + next;
73
+ return acc;
74
+ }
75
+ acc.result += next;
76
+ if (next === '\r' && pattern[acc.idx] === '\n') {
77
+ acc.result += '\n';
78
+ acc.idx++;
79
+ }
80
+ return acc;
81
+ }
82
+ function braces(acc) {
83
+ const char = pattern[acc.idx];
84
+ if (char !== '[')
85
+ return undefined;
86
+ acc.result += char;
87
+ acc.idx++;
88
+ let escCount = 0;
89
+ while (acc.idx < pattern.length) {
90
+ const char = pattern[acc.idx];
91
+ acc.result += char;
92
+ acc.idx++;
93
+ if (char === ']' && !(escCount & 1))
94
+ break;
95
+ escCount = char === '\\' ? escCount + 1 : 0;
96
+ }
97
+ return acc;
98
+ }
99
+ function spaces(acc) {
100
+ const char = pattern[acc.idx];
101
+ if (!(char in SPACES))
102
+ return undefined;
103
+ acc.idx++;
104
+ return acc;
105
+ }
106
+ function comments(acc) {
107
+ const char = pattern[acc.idx];
108
+ if (char !== '#')
109
+ return undefined;
110
+ while (acc.idx < pattern.length && pattern[acc.idx] !== '\n') {
111
+ acc.idx++;
112
+ }
113
+ return acc;
114
+ }
115
+ function copy(acc) {
116
+ const char = pattern[acc.idx++];
117
+ acc.result += char;
118
+ return acc;
119
+ }
120
+ const reducers = [escape, braces, spaces, comments, copy];
121
+ const result = { idx: 0, result: '' };
122
+ while (result.idx < pattern.length) {
123
+ for (const r of reducers) {
124
+ if (r(result))
125
+ break;
126
+ }
127
+ }
128
+ return result.result;
129
+ }
23
130
  //# sourceMappingURL=textRegex.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cspell-lib",
3
- "version": "6.8.2",
3
+ "version": "6.9.0",
4
4
  "description": "A library of useful functions used across various cspell tools.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -48,17 +48,17 @@
48
48
  },
49
49
  "homepage": "https://github.com/streetsidesoftware/cspell#readme",
50
50
  "dependencies": {
51
- "@cspell/cspell-bundled-dicts": "^6.8.2",
52
- "@cspell/cspell-pipe": "^6.8.2",
53
- "@cspell/cspell-types": "^6.8.2",
51
+ "@cspell/cspell-bundled-dicts": "^6.9.0",
52
+ "@cspell/cspell-pipe": "^6.9.0",
53
+ "@cspell/cspell-types": "^6.9.0",
54
54
  "clear-module": "^4.1.2",
55
55
  "comment-json": "^4.2.3",
56
56
  "configstore": "^5.0.1",
57
57
  "cosmiconfig": "^7.0.1",
58
- "cspell-glob": "^6.8.2",
59
- "cspell-grammar": "^6.8.2",
60
- "cspell-io": "^6.8.2",
61
- "cspell-trie-lib": "^6.8.2",
58
+ "cspell-glob": "^6.9.0",
59
+ "cspell-grammar": "^6.9.0",
60
+ "cspell-io": "^6.9.0",
61
+ "cspell-trie-lib": "^6.9.0",
62
62
  "fast-equals": "^4.0.3",
63
63
  "find-up": "^5.0.0",
64
64
  "fs-extra": "^10.1.0",
@@ -83,15 +83,15 @@
83
83
  "@cspell/dict-python": "^2.0.6",
84
84
  "@types/configstore": "^5.0.1",
85
85
  "@types/fs-extra": "^9.0.13",
86
- "@types/jest": "^29.0.1",
87
- "@types/node": "^18.7.16",
86
+ "@types/jest": "^29.0.2",
87
+ "@types/node": "^18.7.18",
88
88
  "cspell-dict-nl-nl": "^1.1.2",
89
89
  "jest": "^29.0.3",
90
90
  "lorem-ipsum": "^2.0.8",
91
91
  "rimraf": "^3.0.2",
92
92
  "rollup": "^2.79.0",
93
93
  "rollup-plugin-dts": "^4.2.2",
94
- "ts-jest": "^29.0.0"
94
+ "ts-jest": "^29.0.1"
95
95
  },
96
- "gitHead": "fb47a5f2f93d333fe5540142f3217e4981a7c27d"
96
+ "gitHead": "d68b540deb382bafb2dce1be8f14935cc0d3cd5d"
97
97
  }