New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cspell

Package Overview
Dependencies
Maintainers
1
Versions
436
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cspell - npm Package Compare versions

Comparing version 1.9.8 to 1.10.0

2

dist/index.d.ts

@@ -5,3 +5,3 @@ export * from './Settings';

export { mergeSettings, readSettings, readSettingsFiles, defaultFileName as defaultSettingsFilename, clearCachedFiles as clearCachedSettings, calcOverrideSettings } from './Settings';
export { SpellingDictionary, createSpellingDictionary, createSpellingDictionaryRx, getDictionary } from './SpellingDictionary';
export { SpellingDictionary, createSpellingDictionary, createSpellingDictionaryRx, getDictionary, SuggestionResult, SuggestionCollector } from './SpellingDictionary';
export { getDefaultSettings, getGlobalSettings } from './Settings';

@@ -8,0 +8,0 @@ export { combineTextAndLanguageSettings } from './Settings/TextDocumentSettings';

@@ -15,8 +15,8 @@ "use strict";

function getDictionary(settings) {
const { words = [], userWords = [], dictionaries = [], dictionaryDefinitions = [] } = settings;
const { words = [], userWords = [], dictionaries = [], dictionaryDefinitions = [], flagWords = [] } = settings;
const spellDictionaries = loadDictionaries(dictionaries, dictionaryDefinitions);
const settingsDictionary = Promise.resolve(SpellingDictionary_1.createSpellingDictionary(words.concat(userWords), 'user_words'));
return SpellingDictionaryCollection_1.createCollectionP([...spellDictionaries, settingsDictionary], 'dictionary collection');
return SpellingDictionaryCollection_1.createCollectionP([...spellDictionaries, settingsDictionary], 'dictionary collection', flagWords);
}
exports.getDictionary = getDictionary;
//# sourceMappingURL=Dictionaries.js.map
import * as Rx from 'rxjs/Rx';
import { IterableLike } from '../util/IterableLike';
import { Trie } from 'cspell-trie';
import { Trie, SuggestionCollector, SuggestionResult } from 'cspell-trie';
import { ReplaceMap } from '../util/repMap';
export interface SuggestionResult {
word: string;
cost: number;
}
export { SuggestionCollector, suggestionCollector, SuggestionResult } from 'cspell-trie';
export declare type FilterSuggestionsPredicate = (word: SuggestionResult) => boolean;
export interface SpellingDictionary {

@@ -13,2 +11,3 @@ readonly name: string;

suggest(word: string, numSuggestions?: number): SuggestionResult[];
genSuggestions(collector: SuggestionCollector): void;
mapWord(word: string): string;

@@ -31,2 +30,3 @@ readonly size: number;

suggest(word: string, numSuggestions?: number): SuggestionResult[];
genSuggestions(collector: SuggestionCollector): void;
readonly size: number;

@@ -49,3 +49,4 @@ }

suggest(word: string, numSuggestions?: number): SuggestionResult[];
genSuggestions(collector: SuggestionCollector): void;
}
export declare function createSpellingDictionaryTrie(data: Rx.Observable<string>, name: string, options?: SpellingDictionaryOptions): Promise<SpellingDictionary>;

@@ -6,2 +6,4 @@ "use strict";

const repMap_1 = require("../util/repMap");
var cspell_trie_2 = require("cspell-trie");
exports.suggestionCollector = cspell_trie_2.suggestionCollector;
const defaultSuggestions = 10;

@@ -27,2 +29,5 @@ class SpellingDictionaryFromSet {

}
genSuggestions(collector) {
this.trie.genSuggestions(collector);
}
get size() {

@@ -98,2 +103,5 @@ return this.words.size;

}
genSuggestions(collector) {
this.trie.genSuggestions(collector);
}
}

@@ -100,0 +108,0 @@ SpellingDictionaryFromTrie.unknownWordsLimit = 1000;

@@ -1,2 +0,2 @@

import { SpellingDictionary, SuggestionResult } from './SpellingDictionary';
import { SpellingDictionary, SuggestionResult, SuggestionCollector } from './SpellingDictionary';
export declare class SpellingDictionaryCollection implements SpellingDictionary {

@@ -7,10 +7,11 @@ readonly dictionaries: SpellingDictionary[];

readonly mapWord: (word: string) => string;
constructor(dictionaries: SpellingDictionary[], name: string);
readonly wordsToFlag: Set<string>;
constructor(dictionaries: SpellingDictionary[], name: string, wordsToFlag: string[]);
has(word: string): boolean;
suggest(word: string, numSuggestions: number): SuggestionResult[];
readonly size: number;
genSuggestions(collector: SuggestionCollector): SuggestionCollector;
}
export declare function createCollection(dictionaries: SpellingDictionary[], name: string): SpellingDictionaryCollection;
export declare function createCollection(dictionaries: SpellingDictionary[], name: string, wordsToFlag?: string[]): SpellingDictionaryCollection;
export declare function isWordInAnyDictionary(dicts: SpellingDictionary[], word: string): boolean;
export declare function makeSuggestions(dicts: SpellingDictionary[], word: string, numSuggestions: number): SuggestionResult[];
export declare function createCollectionP(dicts: Promise<SpellingDictionary>[], name: string): Promise<SpellingDictionaryCollection>;
export declare function createCollectionP(dicts: Promise<SpellingDictionary>[], name: string, wordsToFlag: string[]): Promise<SpellingDictionaryCollection>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const SpellingDictionary_1 = require("./SpellingDictionary");
const gensequence_1 = require("gensequence");
class SpellingDictionaryCollection {
constructor(dictionaries, name) {
constructor(dictionaries, name, wordsToFlag) {
this.dictionaries = dictionaries;

@@ -11,8 +12,11 @@ this.name = name;

this.dictionaries = this.dictionaries.filter(a => !!a.size);
this.wordsToFlag = new Set(wordsToFlag.map(w => w.toLowerCase()));
}
has(word) {
return isWordInAnyDictionary(this.dictionaries, word);
word = word.toLowerCase();
return !this.wordsToFlag.has(word) && isWordInAnyDictionary(this.dictionaries, word);
}
suggest(word, numSuggestions) {
return makeSuggestions(this.dictionaries, word, numSuggestions);
const collector = this.genSuggestions(SpellingDictionary_1.suggestionCollector(word, numSuggestions, word => !this.wordsToFlag.has(word)));
return collector.suggestions;
}

@@ -22,6 +26,10 @@ get size() {

}
genSuggestions(collector) {
this.dictionaries.forEach(dict => dict.genSuggestions(collector));
return collector;
}
}
exports.SpellingDictionaryCollection = SpellingDictionaryCollection;
function createCollection(dictionaries, name) {
return new SpellingDictionaryCollection(dictionaries, name);
function createCollection(dictionaries, name, wordsToFlag = []) {
return new SpellingDictionaryCollection(dictionaries, name, wordsToFlag);
}

@@ -34,22 +42,7 @@ exports.createCollection = createCollection;

exports.isWordInAnyDictionary = isWordInAnyDictionary;
function makeSuggestions(dicts, word, numSuggestions) {
// Make a map of the unique suggestions. If there are duplicates, keep the lowest cost.
const allSuggestions = gensequence_1.genSequence(dicts)
.concatMap(dict => dict.suggest(word, numSuggestions))
.reduceToSequence((map, sug) => {
const cost = Math.min(sug.cost, (map.get(sug.word) || sug).cost);
map.set(sug.word, Object.assign({}, sug, { cost }));
return map;
}, new Map())
.map(([, v]) => v)
.toArray()
.sort((a, b) => a.cost - b.cost);
return allSuggestions.slice(0, numSuggestions);
}
exports.makeSuggestions = makeSuggestions;
function createCollectionP(dicts, name) {
function createCollectionP(dicts, name, wordsToFlag) {
return Promise.all(dicts)
.then(dicts => new SpellingDictionaryCollection(dicts, name));
.then(dicts => new SpellingDictionaryCollection(dicts, name, wordsToFlag));
}
exports.createCollectionP = createCollectionP;
//# sourceMappingURL=SpellingDictionaryCollection.js.map

@@ -17,5 +17,6 @@ "use strict";

];
const dictCollection = new SpellingDictionaryCollection_1.SpellingDictionaryCollection(dicts, 'test');
const dictCollection = new SpellingDictionaryCollection_1.SpellingDictionaryCollection(dicts, 'test', ['Avocado']);
chai_1.expect(dictCollection.has('mango')).to.be.true;
chai_1.expect(dictCollection.has('tree')).to.be.false;
chai_1.expect(dictCollection.has('avocado')).to.be.false;
chai_1.expect(dictCollection.size).to.be.equal(wordsA.length + wordsB.length + wordsC.length);

@@ -30,3 +31,3 @@ });

];
const dictCollection = SpellingDictionaryCollection_1.createCollection(dicts, 'test');
const dictCollection = SpellingDictionaryCollection_1.createCollection(dicts, 'test', ['Avocado']);
const sugsForTango = dictCollection.suggest('tango', 10);

@@ -38,2 +39,13 @@ chai_1.expect(sugsForTango).to.be.not.empty;

});
it('checks for suggestions with flagged words', () => {
const dicts = [
SpellingDictionary_1.createSpellingDictionary(wordsA, 'wordsA'),
SpellingDictionary_1.createSpellingDictionary(wordsB, 'wordsB'),
SpellingDictionary_1.createSpellingDictionary(wordsA, 'wordsA'),
SpellingDictionary_1.createSpellingDictionary(wordsC, 'wordsC'),
];
const dictCollection = SpellingDictionaryCollection_1.createCollection(dicts, 'test', ['Avocado']);
const sugs = dictCollection.suggest('avocado', 10);
chai_1.expect(sugs.map(r => r.word)).to.be.not.contain('avocado');
});
it('checks for suggestions from mixed sources', () => {

@@ -46,3 +58,3 @@ return Promise.all([

.then(dicts => {
const dictCollection = new SpellingDictionaryCollection_1.SpellingDictionaryCollection(dicts, 'test');
const dictCollection = new SpellingDictionaryCollection_1.SpellingDictionaryCollection(dicts, 'test', []);
chai_1.expect(dictCollection.has('mango'));

@@ -69,3 +81,3 @@ chai_1.expect(dictCollection.has('lion'));

];
return SpellingDictionaryCollection_1.createCollectionP(dicts, 'test').then(dictCollection => {
return SpellingDictionaryCollection_1.createCollectionP(dicts, 'test', []).then(dictCollection => {
chai_1.expect(dictCollection.has('mango')).to.be.true;

@@ -72,0 +84,0 @@ chai_1.expect(dictCollection.has('tree')).to.be.false;

@@ -108,3 +108,3 @@ "use strict";

];
return new SpellingDictionary_1.SpellingDictionaryCollection(dicts, 'collection');
return SpellingDictionary_1.createCollection(dicts, 'collection');
}

@@ -111,0 +111,0 @@ const colors = ['red', 'green', 'blue', 'black', 'white', 'orange', 'purple', 'yellow', 'gray', 'brown'];

{
"name": "cspell",
"version": "1.9.8",
"version": "1.10.0",
"description": "A Spelling Checker for Code!",

@@ -91,6 +91,6 @@ "main": "dist/index.js",

"cspell-dict-en_us": "^1.1.4",
"cspell-dict-golang": "^1.1.1",
"cspell-dict-golang": "^1.1.2",
"cspell-dict-python": "^1.0.2",
"cspell-lib": "^1.0.2",
"cspell-trie": "^1.5.1",
"cspell-trie": "^1.6.1",
"fs-extra": "^3.0.0",

@@ -97,0 +97,0 @@ "gensequence": "^2.1.1",

@@ -12,3 +12,10 @@ export * from './Settings';

} from './Settings';
export { SpellingDictionary, createSpellingDictionary, createSpellingDictionaryRx, getDictionary } from './SpellingDictionary';
export {
SpellingDictionary,
createSpellingDictionary,
createSpellingDictionaryRx,
getDictionary,
SuggestionResult,
SuggestionCollector
} from './SpellingDictionary';
export { getDefaultSettings, getGlobalSettings } from './Settings';

@@ -15,0 +22,0 @@ export { combineTextAndLanguageSettings } from './Settings/TextDocumentSettings';

@@ -17,6 +17,6 @@ import { DictionaryDefinition, DictionaryId, CSpellUserSettings } from '../Settings';

export function getDictionary(settings: CSpellUserSettings): Promise<SpellingDictionary> {
const { words = [], userWords = [], dictionaries = [], dictionaryDefinitions = [] } = settings;
const { words = [], userWords = [], dictionaries = [], dictionaryDefinitions = [], flagWords = [] } = settings;
const spellDictionaries = loadDictionaries(dictionaries, dictionaryDefinitions);
const settingsDictionary = Promise.resolve(createSpellingDictionary(words.concat(userWords), 'user_words'));
return createCollectionP([...spellDictionaries, settingsDictionary], 'dictionary collection');
return createCollectionP([...spellDictionaries, settingsDictionary], 'dictionary collection', flagWords);
}
import { genSequence } from 'gensequence';
import * as Rx from 'rxjs/Rx';
import { IterableLike } from '../util/IterableLike';
import {Trie, importTrieRx} from 'cspell-trie';
import {Trie, importTrieRx, SuggestionCollector, SuggestionResult} from 'cspell-trie';
import {ReplaceMap, createMapper} from '../util/repMap';
export interface SuggestionResult {
word: string;
cost: number;
}
export {SuggestionCollector, suggestionCollector, SuggestionResult } from 'cspell-trie';
export type FilterSuggestionsPredicate = (word: SuggestionResult) => boolean;
export interface SpellingDictionary {

@@ -16,2 +15,3 @@ readonly name: string;

suggest(word: string, numSuggestions?: number): SuggestionResult[];
genSuggestions(collector: SuggestionCollector): void;
mapWord(word: string): string;

@@ -51,2 +51,6 @@ readonly size: number;

public genSuggestions(collector: SuggestionCollector): void {
this.trie.genSuggestions(collector);
}
public get size() {

@@ -75,4 +79,2 @@ return this.words.size;

export class SpellingDictionaryFromTrie implements SpellingDictionary {

@@ -129,2 +131,6 @@ static readonly unknownWordsLimit = 1000;

}
public genSuggestions(collector: SuggestionCollector): void {
this.trie.genSuggestions(collector);
}
}

@@ -131,0 +137,0 @@

@@ -17,5 +17,6 @@ import { expect } from 'chai';

const dictCollection = new SpellingDictionaryCollection(dicts, 'test');
const dictCollection = new SpellingDictionaryCollection(dicts, 'test', ['Avocado']);
expect(dictCollection.has('mango')).to.be.true;
expect(dictCollection.has('tree')).to.be.false;
expect(dictCollection.has('avocado')).to.be.false;
expect(dictCollection.size).to.be.equal(wordsA.length + wordsB.length + wordsC.length);

@@ -32,3 +33,3 @@ });

const dictCollection = createCollection(dicts, 'test');
const dictCollection = createCollection(dicts, 'test', ['Avocado']);
const sugsForTango = dictCollection.suggest('tango', 10);

@@ -41,3 +42,15 @@ expect(sugsForTango).to.be.not.empty;

it('checks for suggestions with flagged words', () => {
const dicts = [
createSpellingDictionary(wordsA, 'wordsA'),
createSpellingDictionary(wordsB, 'wordsB'),
createSpellingDictionary(wordsA, 'wordsA'),
createSpellingDictionary(wordsC, 'wordsC'),
];
const dictCollection = createCollection(dicts, 'test', ['Avocado']);
const sugs = dictCollection.suggest('avocado', 10);
expect(sugs.map(r => r.word)).to.be.not.contain('avocado');
});
it('checks for suggestions from mixed sources', () => {

@@ -50,3 +63,3 @@ return Promise.all([

.then(dicts => {
const dictCollection = new SpellingDictionaryCollection(dicts, 'test');
const dictCollection = new SpellingDictionaryCollection(dicts, 'test', []);
expect(dictCollection.has('mango'));

@@ -77,3 +90,3 @@ expect(dictCollection.has('lion'));

return createCollectionP(dicts, 'test').then(dictCollection => {
return createCollectionP(dicts, 'test', []).then(dictCollection => {
expect(dictCollection.has('mango')).to.be.true;

@@ -80,0 +93,0 @@ expect(dictCollection.has('tree')).to.be.false;

@@ -1,2 +0,2 @@

import { SpellingDictionary, SuggestionResult } from './SpellingDictionary';
import { SpellingDictionary, SuggestionResult, SuggestionCollector, suggestionCollector } from './SpellingDictionary';
import { genSequence } from 'gensequence';

@@ -7,12 +7,20 @@

readonly mapWord = (word: string) => word;
constructor(readonly dictionaries: SpellingDictionary[], readonly name: string) {
readonly wordsToFlag: Set<string>;
constructor(
readonly dictionaries: SpellingDictionary[],
readonly name: string,
wordsToFlag: string[],
) {
this.dictionaries = this.dictionaries.filter(a => !!a.size);
this.wordsToFlag = new Set(wordsToFlag.map(w => w.toLowerCase()));
}
public has(word: string) {
return isWordInAnyDictionary(this.dictionaries, word);
word = word.toLowerCase();
return !this.wordsToFlag.has(word) && isWordInAnyDictionary(this.dictionaries, word);
}
public suggest(word: string, numSuggestions: number) {
return makeSuggestions(this.dictionaries, word, numSuggestions);
public suggest(word: string, numSuggestions: number): SuggestionResult[] {
const collector = this.genSuggestions(suggestionCollector(word, numSuggestions, word => !this.wordsToFlag.has(word) ));
return collector.suggestions;
}

@@ -23,6 +31,11 @@

}
public genSuggestions(collector: SuggestionCollector): SuggestionCollector {
this.dictionaries.forEach(dict => dict.genSuggestions(collector));
return collector;
}
}
export function createCollection(dictionaries: SpellingDictionary[], name: string) {
return new SpellingDictionaryCollection(dictionaries, name);
export function createCollection(dictionaries: SpellingDictionary[], name: string, wordsToFlag: string[] = []) {
return new SpellingDictionaryCollection(dictionaries, name, wordsToFlag);
}

@@ -35,23 +48,9 @@

export function makeSuggestions(dicts: SpellingDictionary[], word: string, numSuggestions: number) {
// Make a map of the unique suggestions. If there are duplicates, keep the lowest cost.
const allSuggestions = genSequence(dicts)
.concatMap(dict => dict.suggest(word, numSuggestions))
.reduceToSequence<[string, SuggestionResult], Map<string, SuggestionResult>>((map, sug) => {
const cost = Math.min(sug.cost, (map.get(sug.word) || sug).cost);
map.set(sug.word, { ...sug, cost });
return map;
}, new Map<string, SuggestionResult>())
// Convert the [k, v] to the v
.map(([, v]) => v)
.toArray()
.sort((a, b) => a.cost - b.cost);
return allSuggestions.slice(0, numSuggestions);
}
export function createCollectionP(dicts: Promise<SpellingDictionary>[], name: string): Promise<SpellingDictionaryCollection> {
export function createCollectionP(
dicts: Promise<SpellingDictionary>[],
name: string,
wordsToFlag: string[],
): Promise<SpellingDictionaryCollection> {
return Promise.all(dicts)
.then(dicts => new SpellingDictionaryCollection(dicts, name));
.then(dicts => new SpellingDictionaryCollection(dicts, name, wordsToFlag));
}
import { expect } from 'chai';
import { wordSplitter, validateText, hasWordCheck } from './textValidator';
import { SpellingDictionaryCollection } from './SpellingDictionary';
import { createCollection } from './SpellingDictionary';
import { createSpellingDictionary } from './SpellingDictionary';

@@ -120,3 +120,3 @@ import { FreqCounter } from './util/FreqCounter';

return new SpellingDictionaryCollection(dicts, 'collection');
return createCollection(dicts, 'collection');
}

@@ -123,0 +123,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc