Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add --cache option to lint only changed files #1763

Merged
merged 26 commits into from
Sep 27, 2021
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,7 @@ typings/

.tsbuildinfo

# cspell:ignore pids jscoverage wscript jspm dotenv eslintcache
# cspell cache
.cspellcache

# cspell:ignore pids jscoverage wscript jspm dotenv eslintcache cspellcache
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@
"symlink": "node build_tools/bin/symlink.js packages test-packages",
"test-watch": "lerna run --parallel test-watch",
"test": "lerna run test && npm run test-schema",
"test-bin": "npm run test-bin-spell && npm run test-bin-trace && npm run test-bin-check",
"test-bin": "npm run test-bin-spell && npm run test-bin-spell-cache-content && npm run test-bin-spell-cache-metadata && npm run test-bin-trace && npm run test-bin-check",
"test-bin-check": "node ./bin.js check README.md",
"test-bin-spell": "node ./bin.js -c cspellrc.json",
"test-bin-spell-cache-content": "node ./bin.js -c cspellrc.json --cache --cache-strategy content",
"test-bin-spell-cache-metadata": "node ./bin.js -c cspellrc.json --cache --cache-strategy metadata",
"test-bin-trace": "node ./bin.js trace test",
"test-integrations": "cd ./integration-tests && npm run integration-tests",
"test-schema": "ajv -s ./cspell.schema.json -d cspell.json -c ./packages/cspell-types/ajv.config.js",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ exports[`getReporter saves additional data 1`] = `
},
\\"row\\": 1,
\\"col\\": 14,
\\"doc\\": \\"This text is fulll of errrorrrs.\\",
\\"uri\\": \\"text.txt\\",
\\"context\\": {
\\"text\\": \\"This text is fulll of errrorrrs.\\",
Expand Down Expand Up @@ -82,7 +81,6 @@ exports[`getReporter saves json to file 1`] = `
},
\\"row\\": 1,
\\"col\\": 14,
\\"doc\\": \\"This text is fulll of errrorrrs.\\",
\\"uri\\": \\"text.txt\\",
\\"context\\": {
\\"text\\": \\"This text is fulll of errrorrrs.\\",
Expand Down
1 change: 0 additions & 1 deletion packages/cspell-json-reporter/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ async function runReporter(reporter: CSpellReporter): Promise<void> {
line: { text: 'This text is fulll of errrorrrs.', offset: 0 },
row: 1,
col: 14,
doc: 'This text is fulll of errrorrrs.',
uri: 'text.txt',
context: { text: 'This text is fulll of errrorrrs.', offset: 0 },
});
Expand Down
2 changes: 1 addition & 1 deletion packages/cspell-types/src/CSpellReporter.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { TextDocumentOffset, TextOffset } from './TextOffset';

export interface Issue extends TextDocumentOffset {
export interface Issue extends Omit<TextDocumentOffset, 'doc'> {
/** text surrounding the issue text */
context: TextOffset;
isFlagged?: boolean;
Expand Down
3 changes: 2 additions & 1 deletion packages/cspell/cSpell.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"name": "cspell Project Config",
"language": "en",
"words": [
"configstore"
"configstore",
""
],
"maxNumberOfProblems": 1000,
"ignorePaths": [
Expand Down
42 changes: 37 additions & 5 deletions packages/cspell/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions packages/cspell/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,19 @@
},
"homepage": "https://streetsidesoftware.github.io/cspell/",
"dependencies": {
"@types/file-entry-cache": "^5.0.2",
"@types/imurmurhash": "^0.1.1",
"chalk": "^4.1.2",
"commander": "^8.2.0",
"comment-json": "^4.1.1",
"cspell-glob": "^5.10.0",
"cspell-lib": "^5.10.1",
"fast-json-stable-stringify": "^2.1.0",
"file-entry-cache": "^6.0.1",
"fs-extra": "^10.0.0",
"get-stdin": "^8.0.0",
"glob": "^7.2.0",
"imurmurhash": "^0.1.4",
"strip-ansi": "^6.0.1",
"vscode-uri": "^3.0.2"
},
Expand Down
85 changes: 43 additions & 42 deletions packages/cspell/src/__snapshots__/app.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -269,38 +269,43 @@ Array [
"Check spelling",
"",
"Options:",
" -c, --config <cspell.json> Configuration file to use. By default cspell",
" looks for cspell.json in the current directory.",
" -v, --verbose display more information about the files being",
" checked and the configuration",
" --locale <locale> Set language locales. i.e. \\"en,fr\\" for English",
" and French, or \\"en-GB\\" for British English.",
" --language-id <language> Force programming language for unknown",
" extensions. i.e. \\"php\\" or \\"scala\\"",
" --languageId <language> Force programming language for unknown",
" extensions. i.e. \\"php\\" or \\"scala\\"",
" --wordsOnly Only output the words not found in the",
" dictionaries.",
" -u, --unique Only output the first instance of a word not",
" found in the dictionaries.",
" --debug Output information useful for debugging",
" cspell.json files.",
" -e, --exclude <glob> Exclude files matching the glob pattern. This",
" option can be used multiple times to add multiple",
" globs.",
" --no-issues Do not show the spelling errors.",
" --no-progress Turn off progress messages",
" --no-summary Turn off summary message in console",
" -s, --silent Silent mode, suppress error messages",
" -r, --root <root folder> Root directory, defaults to current directory.",
" --relative Issues are displayed relative to root.",
" --show-context Show the surrounding text around an issue.",
" --show-suggestions Show spelling suggestions.",
" --must-find-files Error if no files are found (default: true)",
" --no-must-find-files Do not error if no files are found",
" --legacy Legacy output",
" --local <local> Deprecated -- Use: --locale",
" -h, --help display help for command",
" -c, --config <cspell.json> Configuration file to use. By default cspell",
" looks for cspell.json in the current directory.",
" -v, --verbose display more information about the files being",
" checked and the configuration",
" --locale <locale> Set language locales. i.e. \\"en,fr\\" for English",
" and French, or \\"en-GB\\" for British English.",
" --language-id <language> Force programming language for unknown",
" extensions. i.e. \\"php\\" or \\"scala\\"",
" --languageId <language> Force programming language for unknown",
" extensions. i.e. \\"php\\" or \\"scala\\"",
" --wordsOnly Only output the words not found in the",
" dictionaries.",
" -u, --unique Only output the first instance of a word not",
" found in the dictionaries.",
" --debug Output information useful for debugging",
" cspell.json files.",
" -e, --exclude <glob> Exclude files matching the glob pattern. This",
" option can be used multiple times to add",
" multiple globs.",
" --no-issues Do not show the spelling errors.",
" --no-progress Turn off progress messages",
" --no-summary Turn off summary message in console",
" -s, --silent Silent mode, suppress error messages",
" -r, --root <root folder> Root directory, defaults to current directory.",
" --relative Issues are displayed relative to root.",
" --show-context Show the surrounding text around an issue.",
" --show-suggestions Show spelling suggestions.",
" --must-find-files Error if no files are found (default: true)",
" --no-must-find-files Do not error if no files are found",
" --legacy Legacy output",
" --local <local> Deprecated -- Use: --locale",
" --cache Only check changed files (default: false)",
" --cache-strategy <strategy> Strategy to use for detecting changed files",
" (choices: \\"metadata\\", \\"content\\")",
" --cache-location <path> Path to the cache file or directory (default:",
" \\".cspellcache\\")",
" -h, --help display help for command",
"",
"",
"Examples:",
Expand Down Expand Up @@ -547,16 +552,12 @@ exports[`Validate cli app trace not-in-any-dictionary Expect Error: [Function Ch
exports[`Validate cli app with errors and excludes Expect Error: [Function CheckFailed] 1`] = `Array []`;

exports[`Validate cli app with errors and excludes Expect Error: [Function CheckFailed] 2`] = `
"error 1/10 ./samples/comments_only -
error 2/10 ./samples/cspell-bad.json 0.00ms
error 3/10 ./samples/cspell-includes.json 0.00ms
error 4/10 ./samples/cspell-missing-dict.json 0.00ms
error 5/10 ./samples/latex -
error 6/10 ./samples/linked -
error 7/10 ./samples/sample.c 0.00ms
error 8/10 ./samples/sample.py 0.00ms
error 9/10 ./samples/src -
error 10/10 ./samples/text.txt 0.00ms X
"error 1/6 ./samples/cspell-bad.json 0.00ms
error 2/6 ./samples/cspell-includes.json 0.00ms
error 3/6 ./samples/cspell-missing-dict.json 0.00ms
error 4/6 ./samples/sample.c 0.00ms
error 5/6 ./samples/sample.py 0.00ms
error 6/6 ./samples/text.txt 0.00ms X
log ./samples/text.txt:1:14 - Unknown word (fulll)
log ./samples/text.txt:1:23 - Unknown word (errrorrrs)
log ./samples/text.txt:3:4 - Unknown word (hass)
Expand Down
9 changes: 9 additions & 0 deletions packages/cspell/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { tableToLines } from './util/table';
import { emitTraceResults } from './traceEmitter';
import { getReporter } from './cli-reporter';
import { CheckFailed } from './util/errors';
import { DEFAULT_CACHE_LOCATION } from './util/cache';

export { CheckFailed } from './util/errors';

Expand Down Expand Up @@ -84,6 +85,14 @@ export async function run(program?: commander.Command, argv?: string[]): Promise
// .option('--force', 'Force the exit value to always be 0')
.option('--legacy', 'Legacy output')
.option('--local <local>', 'Deprecated -- Use: --locale')
.option('--cache', 'Only check changed files', false)
.addOption(
new commander.Option('--cache-strategy <strategy>', 'Strategy to use for detecting changed files').choices([
'metadata',
'content',
])
)
.option('--cache-location <path>', `Path to the cache file or directory`, DEFAULT_CACHE_LOCATION)
.addHelpText('after', usage)
.arguments('[files...]')
.action((files: string[], options: Options) => {
Expand Down
1 change: 0 additions & 1 deletion packages/cspell/src/cli-reporter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ function genIssue(word: string): ReporterIssue {
offset,
uri: 'file://uri/path/filename',
context,
doc,
line,
col,
row,
Expand Down
14 changes: 11 additions & 3 deletions packages/cspell/src/fileHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as fsp from 'fs-extra';
import getStdin from 'get-stdin';
import { GlobOptions, globP } from './util/glob';
import * as path from 'path';
import { CSpellUserSettings, Document, fileToDocument } from 'cspell-lib';
import { CSpellUserSettings, Document, fileToDocument, Issue } from 'cspell-lib';

const UTF8: BufferEncoding = 'utf8';
const STDIN = 'stdin';
Expand Down Expand Up @@ -31,7 +31,15 @@ export async function readConfig(configFile: string | undefined, root: string |

export interface FileInfo {
filename: string;
text: string;
text?: string;
}
export interface FileResult {
fileInfo: FileInfo;
processed: boolean;
issues: Issue[];
mad-gooze marked this conversation as resolved.
Show resolved Hide resolved
errors: number;
configErrors: number;
elapsedTimeMs: number;
}

export function fileInfoToDocument(
Expand All @@ -54,7 +62,7 @@ export function fileInfoToDocument(
return fileToDocument(filename, text, languageId, locale);
}

export function readFileInfo(filename: string, encoding: string = UTF8): Promise<FileInfo> {
export function readFileInfo(filename: string, encoding: string = UTF8): Promise<Required<FileInfo>> {
const pText = filename === STDIN ? getStdin() : fsp.readFile(filename, encoding);
return pText.then(
(text) => ({ text, filename }),
Expand Down
Loading