Socket
Socket
Sign inDemoInstall

vscode-tmgrammar-test

Package Overview
Dependencies
22
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.10 to 0.0.11

.prettierrc

189

dist/src/snapshot.js

@@ -23,3 +23,2 @@ #!/usr/bin/env node

var parsing_1 = require("./snapshot/parsing");
// import { inspect } from 'util';
var diff = __importStar(require("diff"));

@@ -32,11 +31,14 @@ var packageJson = require('../../package.json');

.version(packageJson.version)
.description("Run VSCode textmate grammar snapshot tests")
.description('Run VSCode textmate grammar snapshot tests')
.option('-s, --scope <scope>', 'Language scope, e.g. source.dhall')
.option('-g, --grammar <grammar>', 'Path to a grammar file, either .json or .xml. This option can be specified multiple times if multiple grammar needed.', collectGrammarOpts, [])
.option('-t, --testcases <glob>', 'A glob pattern which specifies testcases to run, e.g. \"./tests/**/test*.dhall\". Quotes are important!')
.option("-u, --updateSnapshot", 'overwrite all snap files with new changes')
.option("--printNotModified", 'include not modified scopes in the output', false)
.option("--expandDiff", 'produce each diff on two lines prefixed with "++" and "--"', false)
.option('-t, --testcases <glob>', 'A glob pattern which specifies testcases to run, e.g. "./tests/**/test*.dhall". Quotes are important!')
.option('-u, --updateSnapshot', 'overwrite all snap files with new changes')
.option('--printNotModified', 'include not modified scopes in the output', false)
.option('--expandDiff', 'produce each diff on two lines prefixed with "++" and "--"', false)
.parse(process.argv);
if (commander_1.default.scope === undefined || commander_1.default.grammar === undefined || commander_1.default.grammar.length === 0 || commander_1.default.testcases === undefined) {
if (commander_1.default.scope === undefined ||
commander_1.default.grammar === undefined ||
commander_1.default.grammar.length === 0 ||
commander_1.default.testcases === undefined) {
commander_1.default.help();

@@ -63,13 +65,16 @@ }

var TestSuccessful = 0;
var Padding = " ";
var Padding = ' ';
var registry = index_1.createRegistry(commander_1.default.grammar);
glob_1.default(commander_1.default.testcases, function (err, files0) {
if (err !== null) {
console.log(chalk_1.default.red("ERROR") + " glob pattern is incorrect: '" + chalk_1.default.gray(commander_1.default.testcases) + "'");
console.log(chalk_1.default.red('ERROR') +
" glob pattern is incorrect: '" +
chalk_1.default.gray(commander_1.default.testcases) +
"'");
console.log(err);
process.exit(-1);
}
var files = files0.filter(function (x) { return !x.endsWith(".snap"); });
var files = files0.filter(function (x) { return !x.endsWith('.snap'); });
if (files.length === 0) {
console.log(chalk_1.default.red("ERROR") + " no test cases found");
console.log(chalk_1.default.red('ERROR') + ' no test cases found');
process.exit(-1);

@@ -81,10 +86,11 @@ }

.then(function (tokens) {
if (fs.existsSync(filename + ".snap")) {
if (fs.existsSync(filename + '.snap')) {
if (commander_1.default.updateSnapshot) {
console.log(chalk_1.default.yellowBright("Updating snapshot for") + chalk_1.default.whiteBright(filename + ".snap"));
fs.writeFileSync(filename + ".snap", parsing_1.renderSnap(tokens), 'utf8');
console.log(chalk_1.default.yellowBright('Updating snapshot for') +
chalk_1.default.whiteBright(filename + '.snap'));
fs.writeFileSync(filename + '.snap', parsing_1.renderSnap(tokens), 'utf8');
return TestSuccessful;
}
else {
var expectedTokens = parsing_1.parseSnap(fs.readFileSync(filename + ".snap").toString());
var expectedTokens = parsing_1.parseSnap(fs.readFileSync(filename + '.snap').toString());
return renderTestResult(filename, expectedTokens, tokens);

@@ -94,4 +100,5 @@ }

else {
console.log(chalk_1.default.yellowBright("Generating snapshot ") + chalk_1.default.whiteBright(filename + ".snap"));
fs.writeFileSync(filename + ".snap", parsing_1.renderSnap(tokens));
console.log(chalk_1.default.yellowBright('Generating snapshot ') +
chalk_1.default.whiteBright(filename + '.snap'));
fs.writeFileSync(filename + '.snap', parsing_1.renderSnap(tokens));
return TestSuccessful;

@@ -101,3 +108,5 @@ }

.catch(function (error) {
console.log(chalk_1.default.red("ERROR") + " can't run testcase: " + chalk_1.default.whiteBright(filename));
console.log(chalk_1.default.red('ERROR') +
" can't run testcase: " +
chalk_1.default.whiteBright(filename));
console.log(error);

@@ -119,3 +128,5 @@ return TestFailed;

if (expected.length !== actual.length) {
console.log(chalk_1.default.red("ERROR running testcase ") + chalk_1.default.whiteBright(filename) + chalk_1.default.red(" snapshot and actual file contain different number of lines." + os_1.EOL));
console.log(chalk_1.default.red('ERROR running testcase ') +
chalk_1.default.whiteBright(filename) +
chalk_1.default.red(" snapshot and actual file contain different number of lines." + os_1.EOL));
return TestFailed;

@@ -127,3 +138,5 @@ }

if (exp.src !== act.src) {
console.log(chalk_1.default.red("ERROR running testcase ") + chalk_1.default.whiteBright(filename) + chalk_1.default.red(" source different snapshot at line " + (i + 1) + "." + os_1.EOL + " expected: " + exp.src + os_1.EOL + " actual: " + act.src + os_1.EOL));
console.log(chalk_1.default.red('ERROR running testcase ') +
chalk_1.default.whiteBright(filename) +
chalk_1.default.red(" source different snapshot at line " + (i + 1) + "." + os_1.EOL + " expected: " + exp.src + os_1.EOL + " actual: " + act.src + os_1.EOL));
return TestFailed;

@@ -140,18 +153,26 @@ }

var actTokenMap = toMap(function (t) { return t.startIndex + ":" + t.startIndex; }, act.tokens);
var removed = exp.tokens.filter(function (t) { return actTokenMap[t.startIndex + ":" + t.startIndex] === undefined; }).map(function (t) {
var removed = exp.tokens
.filter(function (t) { return actTokenMap[t.startIndex + ":" + t.startIndex] === undefined; })
.map(function (t) {
return {
changes: [{
text: t.scopes.join(" "),
changes: [
{
text: t.scopes.join(' '),
changeType: Removed
}],
}
],
from: t.startIndex,
to: t.endIndex,
to: t.endIndex
};
});
var added = act.tokens.filter(function (t) { return expTokenMap[t.startIndex + ":" + t.startIndex] === undefined; }).map(function (t) {
var added = act.tokens
.filter(function (t) { return expTokenMap[t.startIndex + ":" + t.startIndex] === undefined; })
.map(function (t) {
return {
changes: [{
text: t.scopes.join(" "),
changes: [
{
text: t.scopes.join(' '),
changeType: Added
}],
}
],
from: t.startIndex,

@@ -165,17 +186,25 @@ to: t.endIndex

var changes = diff.diffArrays(e.scopes, a.scopes);
if (changes.length === 1 && !changes[0].added && !changes[0].removed) {
if (changes.length === 1 &&
!changes[0].added &&
!changes[0].removed) {
return [];
}
var tchanges = changes.map(function (change) {
var changeType = change.added ? Added : (change.removed ? Removed : NotModified);
var changeType = change.added
? Added
: change.removed
? Removed
: NotModified;
return {
text: change.value.join(" "),
text: change.value.join(' '),
changeType: changeType
};
});
return [{
return [
{
changes: tchanges,
from: a.startIndex,
to: a.endIndex
}];
}
];
}

@@ -186,3 +215,6 @@ else {

}));
var allChanges = modified.concat(added).concat(removed).sort(function (x, y) { return (x.from - y.from) * 10000 + (x.to - y.to); });
var allChanges = modified
.concat(added)
.concat(removed)
.sort(function (x, y) { return (x.from - y.from) * 10000 + (x.to - y.to); });
if (allChanges.length > 0) {

@@ -196,5 +228,5 @@ return [[allChanges, exp.src, i]];

if (wrongLines.length > 0) {
console.log(chalk_1.default.red("ERROR in test case ") + chalk_1.default.whiteBright(filename));
console.log(Padding + Padding + chalk_1.default.red("-- existing snapshot"));
console.log(Padding + Padding + chalk_1.default.green("++ new changes"));
console.log(chalk_1.default.red('ERROR in test case ') + chalk_1.default.whiteBright(filename));
console.log(Padding + Padding + chalk_1.default.red('-- existing snapshot'));
console.log(Padding + Padding + chalk_1.default.green('++ new changes'));
console.log();

@@ -211,3 +243,6 @@ if (commander_1.default.expandDiff) {

else {
console.log(chalk_1.default.green(symbols.ok) + " " + chalk_1.default.whiteBright(filename) + " run successfully.");
console.log(chalk_1.default.green(symbols.ok) +
' ' +
chalk_1.default.whiteBright(filename) +
' run successfully.');
return TestSuccessful;

@@ -221,6 +256,13 @@ }

changes.forEach(function (tchanges) {
var change = tchanges.changes.filter(function (c) { return commander_1.default.printNotModified || c.changeType !== NotModified; }).map(function (c) {
var color = c.changeType === Added ? chalk_1.default.green : (c.changeType === Removed ? chalk_1.default.red : chalk_1.default.gray);
var change = tchanges.changes
.filter(function (c) { return commander_1.default.printNotModified || c.changeType !== NotModified; })
.map(function (c) {
var color = c.changeType === Added
? chalk_1.default.green
: c.changeType === Removed
? chalk_1.default.red
: chalk_1.default.gray;
return color(c.text);
}).join(" ");
})
.join(' ');
printAccents(lineNumberOffset, tchanges.from, tchanges.to, change);

@@ -236,10 +278,22 @@ });

changes.forEach(function (tchanges) {
var removed = tchanges.changes.filter(function (c) { return c.changeType === Removed || (c.changeType === NotModified && commander_1.default.printNotModified); }).map(function (c) {
var removed = tchanges.changes
.filter(function (c) {
return c.changeType === Removed ||
(c.changeType === NotModified && commander_1.default.printNotModified);
})
.map(function (c) {
return chalk_1.default.red(c.text);
}).join(" ");
var added = tchanges.changes.filter(function (c) { return c.changeType === Added || (c.changeType === NotModified && commander_1.default.printNotModified); }).map(function (c) {
})
.join(' ');
var added = tchanges.changes
.filter(function (c) {
return c.changeType === Added ||
(c.changeType === NotModified && commander_1.default.printNotModified);
})
.map(function (c) {
return chalk_1.default.green(c.text);
}).join(" ");
printAccents1(lineNumberOffset, tchanges.from, tchanges.to, chalk_1.default.red("-- ") + removed, Removed);
printAccents1(lineNumberOffset, tchanges.from, tchanges.to, chalk_1.default.green("++ ") + added, Added);
})
.join(' ');
printAccents1(lineNumberOffset, tchanges.from, tchanges.to, chalk_1.default.red('-- ') + removed, Removed);
printAccents1(lineNumberOffset, tchanges.from, tchanges.to, chalk_1.default.green('++ ') + added, Added);
});

@@ -255,23 +309,2 @@ console.log();

}
function arraysEqual(a, b) {
if (a === b) {
return true;
}
;
if (a === null || b === null) {
return false;
}
;
if (a.length !== b.length) {
return false;
}
;
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) {
return false;
}
;
}
return true;
}
function flatten(arr) {

@@ -284,3 +317,3 @@ return arr.reduce(function (acc, val) { return acc.concat(val); }, []);

function printSourceLine(line, n) {
var pos = (n + 1) + ": ";
var pos = n + 1 + ': ';
console.log(Padding + chalk_1.default.gray(pos) + line);

@@ -290,11 +323,15 @@ return pos.length;

function printAccents(offset, from, to, diff) {
var accents = " ".repeat(from) + "^".repeat(to - from);
console.log(Padding + " ".repeat(offset) + accents + " " + diff);
var accents = ' '.repeat(from) + '^'.repeat(to - from);
console.log(Padding + ' '.repeat(offset) + accents + ' ' + diff);
}
function printAccents1(offset, from, to, diff, change) {
var color = change === Added ? chalk_1.default.green : (change === Removed ? chalk_1.default.red : chalk_1.default.gray);
var prefix = change === Added ? "++" : (change === Removed ? "--" : " ");
var accents = color(" ".repeat(from) + "^".repeat(to - from));
console.log(color(prefix) + " ".repeat(offset) + accents + " " + diff);
var color = change === Added
? chalk_1.default.green
: change === Removed
? chalk_1.default.red
: chalk_1.default.gray;
var prefix = change === Added ? '++' : change === Removed ? '--' : ' ';
var accents = color(' '.repeat(from) + '^'.repeat(to - from));
console.log(color(prefix) + ' '.repeat(offset) + accents + ' ' + diff);
}
//# sourceMappingURL=snapshot.js.map

@@ -1,3 +0,3 @@

import { AnnotatedLine } from "./model";
import { AnnotatedLine } from './model';
export declare function parseSnap(s: string): AnnotatedLine[];
export declare function renderSnap(xs: AnnotatedLine[]): string;

@@ -9,10 +9,13 @@ "use strict";

var l = ls[i];
if (l.startsWith(">")) {
if (l.startsWith('>')) {
var src = l.substr(1);
i++;
var tokens = [];
while (i < ls.length && ls[i].startsWith("#")) {
var startIndex = ls[i].indexOf("^");
var endIndex = ls[i].indexOf(" ", startIndex);
var scopes = ls[i].substr(endIndex + 1).split(/\s+/).filter(function (x) { return x !== ""; });
while (i < ls.length && ls[i].startsWith('#')) {
var startIndex = ls[i].indexOf('^');
var endIndex = ls[i].indexOf(' ', startIndex);
var scopes = ls[i]
.substr(endIndex + 1)
.split(/\s+/)
.filter(function (x) { return x !== ''; });
tokens.push({

@@ -40,12 +43,16 @@ startIndex: startIndex - 1,

xs.forEach(function (line) {
result.push(">" + line.src);
result.push('>' + line.src);
if (line.src.trim().length > 0) {
line.tokens.forEach(function (token) {
result.push("#" + (" ".repeat(token.startIndex)) + ("^".repeat(token.endIndex - token.startIndex)) + " " + (token.scopes.join(" ")));
result.push('#' +
' '.repeat(token.startIndex) +
'^'.repeat(token.endIndex - token.startIndex) +
' ' +
token.scopes.join(' '));
});
}
});
return result.join("\n");
return result.join('\n');
}
exports.renderSnap = renderSnap;
//# sourceMappingURL=parsing.js.map

@@ -28,9 +28,12 @@ #!/usr/bin/env node

.version(packageJson.version)
.description("Run Textmate grammar test cases using vscode-textmate")
.description('Run Textmate grammar test cases using vscode-textmate')
.option('-s, --scope <scope>', 'Language scope, e.g. source.dhall')
.option('-g, --grammar <grammar>', 'Path to a grammar file, either .json or .xml. This option can be specified multiple times if multiple grammar needed.', collectGrammarOpts, [])
.option('-t, --testcases <glob>', 'A glob pattern which specifies testcases to run, e.g. \"./tests/**/test*.dhall\". Quotes are important!')
.option('-t, --testcases <glob>', 'A glob pattern which specifies testcases to run, e.g. "./tests/**/test*.dhall". Quotes are important!')
.option('-c, --compact', 'Display output in the compact format, which is easier to use with VSCode problem matchers')
.parse(process.argv);
if (commander_1.default.scope === undefined || commander_1.default.grammar === undefined || commander_1.default.grammar.length === 0 || commander_1.default.testcases === undefined) {
if (commander_1.default.scope === undefined ||
commander_1.default.grammar === undefined ||
commander_1.default.grammar.length === 0 ||
commander_1.default.testcases === undefined) {
commander_1.default.help();

@@ -57,8 +60,8 @@ }

var TestSuccessful = 0;
var Padding = " ";
var Padding = ' ';
var registry = index_1.createRegistry(commander_1.default.grammar);
function printSourceLine(testCase, failure) {
var line = testCase.source[failure.srcLine];
var pos = (failure.line + 1) + ": ";
var accents = " ".repeat(failure.start) + "^".repeat(failure.end - failure.start);
var pos = failure.line + 1 + ': ';
var accents = ' '.repeat(failure.start) + '^'.repeat(failure.end - failure.start);
var termWidth = terminalWidth - pos.length - Padding.length - 5;

@@ -69,13 +72,15 @@ var trimLeft = failure.end > termWidth ? Math.max(0, failure.start - 8) : 0;

console.log(Padding + chalk_1.default.gray(pos) + line1.substr(0, termWidth));
console.log(Padding + " ".repeat(pos.length) + accents1.substr(0, termWidth));
console.log(Padding + ' '.repeat(pos.length) + accents1.substr(0, termWidth));
}
function printReason(testCase, failure) {
if (failure.missing && failure.missing.length > 0) {
console.log(chalk_1.default.red(Padding + "missing required scopes: ") + chalk_1.default.gray(failure.missing.join(" ")));
console.log(chalk_1.default.red(Padding + 'missing required scopes: ') +
chalk_1.default.gray(failure.missing.join(' ')));
}
if (failure.unexpected && failure.unexpected.length > 0) {
console.log(chalk_1.default.red(Padding + "prohibited scopes: ") + chalk_1.default.gray(failure.unexpected.join(" ")));
console.log(chalk_1.default.red(Padding + 'prohibited scopes: ') +
chalk_1.default.gray(failure.unexpected.join(' ')));
}
if (failure.actual !== undefined) {
console.log(chalk_1.default.red(Padding + "actual: ") + chalk_1.default.gray(failure.actual.join(" ")));
console.log(chalk_1.default.red(Padding + 'actual: ') + chalk_1.default.gray(failure.actual.join(' ')));
}

@@ -85,10 +90,16 @@ }

if (failures.length === 0) {
console.log(chalk_1.default.green(symbols.ok) + " " + chalk_1.default.whiteBright(filename) + " run successfuly.");
console.log(chalk_1.default.green(symbols.ok) +
' ' +
chalk_1.default.whiteBright(filename) +
" run successfuly.");
return TestSuccessful;
}
else {
console.log(chalk_1.default.red(symbols.err + " " + filename + " failed"));
console.log(chalk_1.default.red(symbols.err + ' ' + filename + ' failed'));
failures.forEach(function (failure) {
var _a = getCorrectedOffsets(failure), l = _a.l, s = _a.s, e = _a.e;
console.log(Padding + "at [" + chalk_1.default.whiteBright(filename + ":" + l + ":" + s + ":" + e) + "]: ");
console.log(Padding +
'at [' +
chalk_1.default.whiteBright(filename + ":" + l + ":" + s + ":" + e) +
']:');
printSourceLine(testCase, failure);

@@ -98,3 +109,3 @@ printReason(testCase, failure);

});
console.log("");
console.log('');
return TestFailed;

@@ -104,11 +115,11 @@ }

function renderCompactErrorMsg(testCase, failure) {
var res = "";
var res = '';
if (failure.missing && failure.missing.length > 0) {
res += "Missing required scopes: [ " + failure.missing.join(" ") + " ] ";
res += "Missing required scopes: [ " + failure.missing.join(' ') + " ] ";
}
if (failure.unexpected && failure.unexpected.length > 0) {
res += "Prohibited scopes: [ " + failure.unexpected.join(" ") + " ] ";
res += "Prohibited scopes: [ " + failure.unexpected.join(' ') + " ] ";
}
if (failure.actual !== undefined) {
res += "actual scopes: [" + failure.actual.join(" ") + "]";
res += "actual scopes: [" + failure.actual.join(' ') + "]";
}

@@ -119,3 +130,6 @@ return res;

if (failures.length === 0) {
console.log(chalk_1.default.green(symbols.ok) + " " + chalk_1.default.whiteBright(filename) + " run successfuly.");
console.log(chalk_1.default.green(symbols.ok) +
' ' +
chalk_1.default.whiteBright(filename) +
" run successfuly.");
return TestSuccessful;

@@ -131,10 +145,18 @@ }

function handleGrammarTestError(filename, testCase, reason) {
console.log(chalk_1.default.red(symbols.err) + " testcase " + chalk_1.default.gray(filename) + " aborted due to an error");
console.log(chalk_1.default.red(symbols.err) +
' testcase ' +
chalk_1.default.gray(filename) +
' aborted due to an error');
console.log(reason);
return TestFailed;
}
var displayTestResult = commander_1.default.compact ? displayTestResultCompact : displayTestResultFull;
var displayTestResult = commander_1.default.compact
? displayTestResultCompact
: displayTestResultFull;
glob_1.default(commander_1.default.testcases, function (err, files) {
if (err !== null) {
console.log(chalk_1.default.red("ERROR") + " glob pattern is incorrect: '" + chalk_1.default.gray(commander_1.default.testcases) + "'");
console.log(chalk_1.default.red('ERROR') +
" glob pattern is incorrect: '" +
chalk_1.default.gray(commander_1.default.testcases) +
"'");
console.log(err);

@@ -144,3 +166,3 @@ process.exit(-1);

if (files.length === 0) {
console.log(chalk_1.default.red("ERROR") + " no test cases found");
console.log(chalk_1.default.red('ERROR') + ' no test cases found');
process.exit(-1);

@@ -154,10 +176,17 @@ }

catch (error) {
console.log(chalk_1.default.red("ERROR") + " can't parse testcase: " + chalk_1.default.whiteBright(filename) + "");
console.log(chalk_1.default.red('ERROR') +
" can't parse testcase: " +
chalk_1.default.whiteBright(filename) +
'');
console.log(error);
return new Promise(function (resolve, reject) { resolve(TestFailed); });
return new Promise(function (resolve, reject) {
resolve(TestFailed);
});
}
var testCase = tc;
return index_1.runGrammarTestCase(registry, testCase).then(function (failures) {
return index_1.runGrammarTestCase(registry, testCase)
.then(function (failures) {
return displayTestResult(filename, testCase, failures);
}).catch(function (error) {
})
.catch(function (error) {
return handleGrammarTestError(filename, testCase, error);

@@ -164,0 +193,0 @@ });

@@ -6,3 +6,7 @@ import * as tm from 'vscode-textmate';

export declare function runGrammarTestCase(registry: tm.Registry, testCase: GrammarTestCase): Promise<TestFailure[]>;
export declare function createRegistryFromGrammars(grammars: Array<{
path: string;
content: string;
}>): tm.Registry;
export declare function createRegistry(grammarPaths: string[]): tm.Registry;
declare function missingScopes_(rs: string[], as: string[]): string[];

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

Object.defineProperty(exports, "__esModule", { value: true });
// import _ from "lodash";
var fs = __importStar(require("fs"));
//import { inspect } from 'util';
var tm = __importStar(require("vscode-textmate"));
var oniguruma = __importStar(require("vscode-oniguruma"));
var parsing_1 = require("./parsing");

@@ -56,3 +55,5 @@ exports.parseGrammarTestCase = parsing_1.parseGrammarTestCase;

return __generator(this, function (_a) {
return [2 /*return*/, registry.loadGrammar(testCase.metadata.scope).then(function (grammar) {
return [2 /*return*/, registry
.loadGrammar(testCase.metadata.scope)
.then(function (grammar) {
if (!grammar) {

@@ -85,3 +86,5 @@ throw new Error("Could not load scope " + testCase.metadata.scope);

xs.forEach(function (token) {
var unexpected = excludedScopes.filter(function (s) { return token.scopes.includes(s); });
var unexpected = excludedScopes.filter(function (s) {
return token.scopes.includes(s);
});
var missing = missingScopes_(requiredScopes, token.scopes);

@@ -110,20 +113,27 @@ if (missing.length || unexpected.length) {

exports.runGrammarTestCase = runGrammarTestCase;
function createRegistry(grammarPaths) {
var grammars = {};
for (var _i = 0, grammarPaths_1 = grammarPaths; _i < grammarPaths_1.length; _i++) {
var path = grammarPaths_1[_i];
var content = fs.readFileSync(path).toString();
function createRegistryFromGrammars(grammars) {
var grammarIndex = {};
for (var _i = 0, grammars_1 = grammars; _i < grammars_1.length; _i++) {
var grammar = grammars_1[_i];
var path = grammar.path, content = grammar.content;
var rawGrammar = tm.parseRawGrammar(content, path);
grammars[rawGrammar.scopeName] = rawGrammar;
grammarIndex[rawGrammar.scopeName] = rawGrammar;
}
var wasmPath = require.resolve('vscode-oniguruma').replace(/main\.js$/, 'onig.wasm');
var wasmBin = fs.readFileSync(wasmPath).buffer;
var vscodeOnigurumaLib = oniguruma.loadWASM(wasmBin).then(function () {
return {
createOnigScanner: function (patterns) { return new oniguruma.OnigScanner(patterns); },
createOnigString: function (s) { return new oniguruma.OnigString(s); }
};
});
return new tm.Registry({
onigLib: vscodeOnigurumaLib,
loadGrammar: function (scopeName) {
if (grammars[scopeName] !== undefined) {
return new Promise(function (c, e) {
c(grammars[scopeName]);
if (grammarIndex[scopeName] !== undefined) {
return new Promise(function (fulfill, _) {
fulfill(grammarIndex[scopeName]);
});
}
else {
console.warn("grammar not found for '" + scopeName + "'");
}
console.warn("grammar not found for \"" + scopeName + "\"");
return null;

@@ -133,2 +143,11 @@ }

}
exports.createRegistryFromGrammars = createRegistryFromGrammars;
function createRegistry(grammarPaths) {
return createRegistryFromGrammars(grammarPaths.map(function (path) {
return {
path: path,
content: fs.readFileSync(path).toString()
};
}));
}
exports.createRegistry = createRegistry;

@@ -156,23 +175,2 @@ // ------------------------------------------------------------ helper functions --------------------------------------

}
function arraysEqual(a, b) {
if (a === b) {
return true;
}
;
if (a === null || b === null) {
return false;
}
;
if (a.length !== b.length) {
return false;
}
;
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) {
return false;
}
;
}
return true;
}
//# sourceMappingURL=index.js.map
import { ScopeAssertion, TestCaseMetadata, GrammarTestCase } from './model';
export declare function parseScopeAssertion(testCaseLineNumber: number, commentLength: number, as: String): ScopeAssertion[];
/**
* parse the first line with the format:
* <comment character(s)> SYNTAX TEST "<language identifier>" <"description">? ([+-]<flag>)*
*/
export declare function parseHeader(as: string[]): TestCaseMetadata;
export declare function parseGrammarTestCase(str: string): GrammarTestCase;

@@ -11,3 +11,2 @@ "use strict";

var os_1 = require("os");
// import { start } from 'repl';
var leftArrowAssertRegex = /^(\s*)<([~]*)([-]+)((?:\s*\w[-\w.]*)*)(?:\s*-)?((?:\s*\w[-\w.]*)*)\s*$/;

@@ -20,4 +19,4 @@ var upArrowAssertRegex = /^\s*((?:(?:\^+)\s*)+)((?:\s*\w[-\w.]*)*)(?:\s*-)?((?:\s*\w[-\w.]*)*)\s*$/;

if (upArrowMatch !== null) {
var _a = upArrowMatch[2], scopes = _a === void 0 ? "" : _a, _b = upArrowMatch[3], exclusions = _b === void 0 ? "" : _b;
if (scopes === "" && exclusions === "") {
var _a = upArrowMatch[2], scopes = _a === void 0 ? '' : _a, _b = upArrowMatch[3], exclusions = _b === void 0 ? '' : _b;
if (scopes === '' && exclusions === '') {
throw new Error("Inalid assertion at line " + testCaseLineNumber + ":" + os_1.EOL + as + os_1.EOL + " Missing both required and prohibited scopes");

@@ -27,3 +26,3 @@ }

var result = [];
var startIdx = s.indexOf("^");
var startIdx = s.indexOf('^');
while (startIdx !== -1) {

@@ -40,3 +39,3 @@ var endIndx = startIdx;

});
startIdx = s.indexOf("^", endIndx + 1);
startIdx = s.indexOf('^', endIndx + 1);
}

@@ -52,8 +51,9 @@ return result;

if (leftArrowMatch !== null) {
var tildas = leftArrowMatch[2], dashes = leftArrowMatch[3], _c = leftArrowMatch[4], scopes = _c === void 0 ? "" : _c, _d = leftArrowMatch[5], exclusions = _d === void 0 ? "" : _d;
if (scopes === "" && exclusions === "") {
var tildas = leftArrowMatch[2], dashes = leftArrowMatch[3], _c = leftArrowMatch[4], scopes = _c === void 0 ? '' : _c, _d = leftArrowMatch[5], exclusions = _d === void 0 ? '' : _d;
if (scopes === '' && exclusions === '') {
throw new Error("Inalid assertion at line " + testCaseLineNumber + ":" + os_1.EOL + as + os_1.EOL + " Missing both required and prohibited scopes");
}
else {
return [{
return [
{
from: tildas.length,

@@ -63,3 +63,4 @@ to: tildas.length + dashes.length,

exclude: exclusions.split(/\s+/).filter(function (x) { return x; })
}];
}
];
}

@@ -73,6 +74,6 @@ }

var headerRegex = /^([^\s]+)\s+SYNTAX\s+TEST\s+"([^"]+)"(?:\s+\"([^"]+)\")?\s*(\+AllowMiddleLineAssertions)?\s*$/;
/*
parse the first line with the format:
<comment character(s)> SYNTAX TEST "<language identifier>" <"description">? ([+-]<flag>)*
*/
/**
* parse the first line with the format:
* <comment character(s)> SYNTAX TEST "<language identifier>" <"description">? ([+-]<flag>)*
*/
function parseHeader(as) {

@@ -87,3 +88,3 @@ if (as.length < 1) {

else {
var commentToken = matchResult[1], scope = matchResult[2], _a = matchResult[3], description = _a === void 0 ? "" : _a, _b = matchResult[4], allowMiddleLineAssertions = _b === void 0 ? "" : _b;
var commentToken = matchResult[1], scope = matchResult[2], _a = matchResult[3], description = _a === void 0 ? '' : _a, _b = matchResult[4], allowMiddleLineAssertions = _b === void 0 ? '' : _b;
return {

@@ -93,3 +94,3 @@ commentToken: commentToken,

description: description,
allowMiddleLineAssertions: allowMiddleLineAssertions !== ""
allowMiddleLineAssertions: allowMiddleLineAssertions !== ''
};

@@ -122,6 +123,2 @@ }

currentLineAssertion.scopeAssertions = __spreadArrays(currentLineAssertion.scopeAssertions, as);
// if (!skipComments) {
// source.push(s)
// sourceLineNumber++;
// }
}

@@ -131,12 +128,5 @@ else if (s.startsWith(commentToken)) {

currentLineAssertion.scopeAssertions = __spreadArrays(currentLineAssertion.scopeAssertions, as);
// if (!skipComments) {
// source.push(s)
// sourceLineNumber++;
// }
}
else {
if (currentLineAssertion.scopeAssertions.length === 0) {
// ignore existing one
}
else {
if (currentLineAssertion.scopeAssertions.length !== 0) {
lineAssertions.push(currentLineAssertion);

@@ -143,0 +133,0 @@ }

{
"name": "vscode-tmgrammar-test",
"version": "0.0.10",
"version": "0.0.11",
"description": "Test helper for VSCode textmate grammars",

@@ -16,5 +16,7 @@ "main": "./dist/src/index.js",

"scripts": {
"build": "tsc",
"test": "mocha -r ts-node/register 'test/**/*.test.ts'",
"coverage": "npx nyc --reporter=html mocha -r ts-node/register 'test/**/*.test.ts'"
"build": "npx tsc",
"coverage": "npx nyc --reporter=html mocha -r ts-node/register 'test/**/*.test.ts'",
"format": "prettier --config .prettierrc 'src/**/*.ts' 'test/**/*.ts' --write",
"lint": "tslint -c tslint.json 'src/**/*.ts'",
"test": "mocha -r ts-node/register 'test/**/*.test.ts'"
},

@@ -46,3 +48,4 @@ "bin": {

"nyc": "^15.0.1",
"ts-node": "^8.10.0",
"prettier": "^2.1.2",
"ts-node": "^8.10.2",
"tslint": "^5.20.1",

@@ -56,4 +59,5 @@ "typescript": "^3.8.3"

"glob": "^7.1.6",
"vscode-textmate": "^4.1.1"
"vscode-oniguruma": "^1.5.1",
"vscode-textmate": "^5.4.0"
}
}

@@ -0,3 +1,5 @@

![Node.js CI](https://img.shields.io/github/workflow/status/PanAeon/vscode-tmgrammar-test/Node.js%20CI?style=for-the-badge) ![NPM Version](https://img.shields.io/npm/v/vscode-tmgrammar-test?style=for-the-badge)
## VSCode Textmate grammar test
Provides a way to test textmate grammars against a vscode engine using user-friendly plaintext files.

@@ -4,0 +6,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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc