gurkencheck 0.0.4 → 0.0.6
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/gherkin/keywords.d.ts +10 -0
- package/dist/gherkin/keywords.d.ts.map +1 -1
- package/dist/gherkin/keywords.js +20 -0
- package/dist/gherkin/keywords.js.map +1 -1
- package/dist/gherkin/traverse.d.ts +8 -0
- package/dist/gherkin/traverse.d.ts.map +1 -1
- package/dist/gherkin/traverse.js +23 -0
- package/dist/gherkin/traverse.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/rules/background-setup-only.d.ts +4 -0
- package/dist/rules/background-setup-only.d.ts.map +1 -0
- package/dist/rules/background-setup-only.js +32 -0
- package/dist/rules/background-setup-only.js.map +1 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/no-scenarios-without-then.d.ts +4 -0
- package/dist/rules/no-scenarios-without-then.d.ts.map +1 -0
- package/dist/rules/no-scenarios-without-then.js +50 -0
- package/dist/rules/no-scenarios-without-then.js.map +1 -0
- package/dist/rules/no-scenarios-without-when.d.ts +4 -0
- package/dist/rules/no-scenarios-without-when.d.ts.map +1 -0
- package/dist/rules/no-scenarios-without-when.js +50 -0
- package/dist/rules/no-scenarios-without-when.js.map +1 -0
- package/package.json +17 -2
|
@@ -14,6 +14,16 @@ export type NeutralKeyword = 'feature' | 'rule' | 'background' | 'scenario' | 's
|
|
|
14
14
|
* (`scenario`). Returns an empty string for keywords the dialect does not know.
|
|
15
15
|
*/
|
|
16
16
|
export declare function getNeutralKeyword(node: Pick<KeywordNode, 'keyword'>, language: string | undefined): NeutralKeyword;
|
|
17
|
+
/**
|
|
18
|
+
* The keyword of each step, with `And`, `But` and `*` replaced by the keyword
|
|
19
|
+
* they carry on from.
|
|
20
|
+
*
|
|
21
|
+
* A step's own keyword does not say what the step does: `And I log in` is a
|
|
22
|
+
* setup, an action or a verification depending only on what came before it.
|
|
23
|
+
* A step that carries on from nothing - an `And` written first - resolves to
|
|
24
|
+
* the empty string, the same as a keyword the dialect does not know.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolvedStepKeywords(steps: readonly Pick<Step, 'keyword'>[], language: string | undefined): NeutralKeyword[];
|
|
17
27
|
/** True when the keyword is a Given/When/Then/And/But step keyword. */
|
|
18
28
|
export declare function isStepKeyword(keyword: NeutralKeyword): boolean;
|
|
19
29
|
/** The display name for a node, as used in error messages. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/gherkin/keywords.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAG5F,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEnF,oDAAoD;AACpD,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,MAAM,GACN,YAAY,GACZ,UAAU,GACV,iBAAiB,GACjB,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,EAAE,CAAC;AAkBP;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,cAAc,CAQhB;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAE9D;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAkBR"}
|
|
1
|
+
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/gherkin/keywords.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAG5F,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEnF,oDAAoD;AACpD,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,MAAM,GACN,YAAY,GACZ,UAAU,GACV,iBAAiB,GACjB,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,EAAE,CAAC;AAkBP;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,cAAc,CAQhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,cAAc,EAAE,CAWlB;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAE9D;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAkBR"}
|
package/dist/gherkin/keywords.js
CHANGED
|
@@ -26,6 +26,26 @@ export function getNeutralKeyword(node, language) {
|
|
|
26
26
|
}
|
|
27
27
|
return '';
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* The keyword of each step, with `And`, `But` and `*` replaced by the keyword
|
|
31
|
+
* they carry on from.
|
|
32
|
+
*
|
|
33
|
+
* A step's own keyword does not say what the step does: `And I log in` is a
|
|
34
|
+
* setup, an action or a verification depending only on what came before it.
|
|
35
|
+
* A step that carries on from nothing - an `And` written first - resolves to
|
|
36
|
+
* the empty string, the same as a keyword the dialect does not know.
|
|
37
|
+
*/
|
|
38
|
+
export function resolvedStepKeywords(steps, language) {
|
|
39
|
+
let carried = '';
|
|
40
|
+
return steps.map((step) => {
|
|
41
|
+
const keyword = getNeutralKeyword(step, language);
|
|
42
|
+
if (keyword === 'and' || keyword === 'but') {
|
|
43
|
+
return carried;
|
|
44
|
+
}
|
|
45
|
+
carried = keyword;
|
|
46
|
+
return keyword;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
29
49
|
/** True when the keyword is a Given/When/Then/And/But step keyword. */
|
|
30
50
|
export function isStepKeyword(keyword) {
|
|
31
51
|
return STEP_KEYWORDS.has(keyword);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keywords.js","sourceRoot":"","sources":["../../src/gherkin/keywords.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAoBzC,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,aAAa,GAAG,IAAI,GAAG,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkC,EAClC,QAA4B;IAE5B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,WAAW,EAAoB,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CACzB,IAAkC,EAClC,QAA4B;IAE5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB;YACpB,OAAO,kBAAkB,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"keywords.js","sourceRoot":"","sources":["../../src/gherkin/keywords.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAoBzC,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;CACG,CAAC;AAEX,MAAM,aAAa,GAAG,IAAI,GAAG,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkC,EAClC,QAA4B;IAE5B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,WAAW,EAAoB,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAuC,EACvC,QAA4B;IAE5B,IAAI,OAAO,GAAmB,EAAE,CAAC;IAEjC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CACzB,IAAkC,EAClC,QAA4B;IAE5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB;YACpB,OAAO,kBAAkB,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -24,6 +24,14 @@ export declare function backgroundsOf(feature: Feature): Generator<{
|
|
|
24
24
|
background: Background;
|
|
25
25
|
rule: Rule | undefined;
|
|
26
26
|
}>;
|
|
27
|
+
/**
|
|
28
|
+
* The Backgrounds whose steps run before a Scenario.
|
|
29
|
+
*
|
|
30
|
+
* A Scenario inside a `Rule:` inherits the Feature's Background as well as
|
|
31
|
+
* the Rule's own, so a rule asking what a Scenario actually does has to look
|
|
32
|
+
* at both.
|
|
33
|
+
*/
|
|
34
|
+
export declare function backgroundsFor(feature: Feature, containingRule: Rule | undefined): Background[];
|
|
27
35
|
/** Every node that holds steps: Backgrounds and Scenarios, Rules included. */
|
|
28
36
|
export declare function stepContainersOf(feature: Feature): Generator<StepContainer>;
|
|
29
37
|
/** Anything a tag may be written on. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/gherkin/traverse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAEtF,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,iCAAiC;AACjC,wBAAiB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAM1D;AAED,yEAAyE;AACzE,wBAAiB,WAAW,CAC1B,OAAO,EAAE,OAAO,GACf,SAAS,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;CAAC,CAAC,CAazD;AAED,sDAAsD;AACtD,wBAAiB,aAAa,CAC5B,OAAO,EAAE,OAAO,GACf,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;CAAC,CAAC,CAa7D;AAED,8EAA8E;AAC9E,wBAAiB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAmB5E;AAED,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,wEAAwE;IACxE,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAiB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,CAuBtE"}
|
|
1
|
+
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/gherkin/traverse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAEtF,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,iCAAiC;AACjC,wBAAiB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAM1D;AAED,yEAAyE;AACzE,wBAAiB,WAAW,CAC1B,OAAO,EAAE,OAAO,GACf,SAAS,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;CAAC,CAAC,CAazD;AAED,sDAAsD;AACtD,wBAAiB,aAAa,CAC5B,OAAO,EAAE,OAAO,GACf,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;CAAC,CAAC,CAa7D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,EAAE,CAkB/F;AAED,8EAA8E;AAC9E,wBAAiB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAmB5E;AAED,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,wEAAwE;IACxE,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAiB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,CAuBtE"}
|
package/dist/gherkin/traverse.js
CHANGED
|
@@ -36,6 +36,29 @@ export function* backgroundsOf(feature) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* The Backgrounds whose steps run before a Scenario.
|
|
41
|
+
*
|
|
42
|
+
* A Scenario inside a `Rule:` inherits the Feature's Background as well as
|
|
43
|
+
* the Rule's own, so a rule asking what a Scenario actually does has to look
|
|
44
|
+
* at both.
|
|
45
|
+
*/
|
|
46
|
+
export function backgroundsFor(feature, containingRule) {
|
|
47
|
+
const backgrounds = [];
|
|
48
|
+
for (const child of feature.children) {
|
|
49
|
+
if (child.background !== undefined) {
|
|
50
|
+
backgrounds.push(child.background);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (containingRule !== undefined) {
|
|
54
|
+
for (const child of containingRule.children) {
|
|
55
|
+
if (child.background !== undefined) {
|
|
56
|
+
backgrounds.push(child.background);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return backgrounds;
|
|
61
|
+
}
|
|
39
62
|
/** Every node that holds steps: Backgrounds and Scenarios, Rules included. */
|
|
40
63
|
export function* stepContainersOf(feature) {
|
|
41
64
|
for (const child of feature.children) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/gherkin/traverse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/gherkin/traverse.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-setup-only.d.ts","sourceRoot":"","sources":["../../src/rules/background-setup-only.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,aAAa,CAAC;AAKrD,QAAA,MAAM,IAAI,EAAE,QA8BX,CAAC;eAEa,IAAI"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { resolvedStepKeywords } from '../gherkin/keywords.js';
|
|
2
|
+
import { backgroundsOf } from '../gherkin/traverse.js';
|
|
3
|
+
import { at } from '../util/location.js';
|
|
4
|
+
const name = 'background-setup-only';
|
|
5
|
+
const rule = {
|
|
6
|
+
name,
|
|
7
|
+
run(feature) {
|
|
8
|
+
if (feature === undefined) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const errors = [];
|
|
12
|
+
for (const { background } of backgroundsOf(feature)) {
|
|
13
|
+
const keywords = resolvedStepKeywords(background.steps, feature.language);
|
|
14
|
+
// One error per step rather than one for the Background, because each
|
|
15
|
+
// step is a separate decision: move it into the scenarios, or drop it.
|
|
16
|
+
background.steps.forEach((step, index) => {
|
|
17
|
+
const keyword = keywords[index];
|
|
18
|
+
if (keyword !== 'when' && keyword !== 'then') {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
errors.push({
|
|
22
|
+
message: `Step "${step.keyword}${step.text}" is not a setup step, and a Background only sets things up`,
|
|
23
|
+
rule: name,
|
|
24
|
+
...at(step.location),
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return errors;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export default rule;
|
|
32
|
+
//# sourceMappingURL=background-setup-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-setup-only.js","sourceRoot":"","sources":["../../src/rules/background-setup-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAC,EAAE,EAAC,MAAM,qBAAqB,CAAC;AAEvC,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAErC,MAAM,IAAI,GAAa;IACrB,IAAI;IACJ,GAAG,CAAC,OAAO;QACT,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,EAAC,UAAU,EAAC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE1E,sEAAsE;YACtE,uEAAuE;YACvE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,6DAA6D;oBACvG,IAAI,EAAE,IAAI;oBACV,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACrB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAsC1C,kEAAkE;AAClE,eAAO,MAAM,cAAc,EAAE,SAAS,QAAQ,EAqC7C,CAAC"}
|
package/dist/rules/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import allowedTags from './allowed-tags.js';
|
|
2
|
+
import backgroundSetupOnly from './background-setup-only.js';
|
|
2
3
|
import fileName from './file-name.js';
|
|
3
4
|
import indentation from './indentation.js';
|
|
4
5
|
import keywordsInLogicalOrder from './keywords-in-logical-order.js';
|
|
@@ -20,6 +21,8 @@ import noPartiallyCommentedTagLines from './no-partially-commented-tag-lines.js'
|
|
|
20
21
|
import noRestrictedPatterns from './no-restricted-patterns.js';
|
|
21
22
|
import noRestrictedTags from './no-restricted-tags.js';
|
|
22
23
|
import noScenarioOutlinesWithoutExamples from './no-scenario-outlines-without-examples.js';
|
|
24
|
+
import noScenariosWithoutThen from './no-scenarios-without-then.js';
|
|
25
|
+
import noScenariosWithoutWhen from './no-scenarios-without-when.js';
|
|
23
26
|
import noSuperfluousTags from './no-superfluous-tags.js';
|
|
24
27
|
import noTrailingSpaces from './no-trailing-spaces.js';
|
|
25
28
|
import noUndeclaredVariables from './no-undeclared-variables.js';
|
|
@@ -34,6 +37,7 @@ import useAnd from './use-and.js';
|
|
|
34
37
|
/** Every rule shipped with gurkencheck, in alphabetical order. */
|
|
35
38
|
export const BUILT_IN_RULES = [
|
|
36
39
|
allowedTags,
|
|
40
|
+
backgroundSetupOnly,
|
|
37
41
|
fileName,
|
|
38
42
|
indentation,
|
|
39
43
|
keywordsInLogicalOrder,
|
|
@@ -55,6 +59,8 @@ export const BUILT_IN_RULES = [
|
|
|
55
59
|
noRestrictedPatterns,
|
|
56
60
|
noRestrictedTags,
|
|
57
61
|
noScenarioOutlinesWithoutExamples,
|
|
62
|
+
noScenariosWithoutThen,
|
|
63
|
+
noScenariosWithoutWhen,
|
|
58
64
|
noSuperfluousTags,
|
|
59
65
|
noTrailingSpaces,
|
|
60
66
|
noUndeclaredVariables,
|
package/dist/rules/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAUA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAChD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAClE,OAAO,uBAAuB,MAAM,iCAAiC,CAAC;AACtE,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,oBAAoB,MAAM,8BAA8B,CAAC;AAChE,OAAO,4BAA4B,MAAM,uCAAuC,CAAC;AACjF,OAAO,oBAAoB,MAAM,6BAA6B,CAAC;AAC/D,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,iCAAiC,MAAM,4CAA4C,CAAC;AAC3F,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,qBAAqB,MAAM,8BAA8B,CAAC;AACjE,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,WAAW;IACX,QAAQ;IACR,WAAW;IACX,sBAAsB;IACtB,mBAAmB;IACnB,UAAU;IACV,YAAY;IACZ,wBAAwB;IACxB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,uBAAuB;IACvB,gBAAgB;IAChB,oBAAoB;IACpB,4BAA4B;IAC5B,oBAAoB;IACpB,gBAAgB;IAChB,iCAAiC;IACjC,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,MAAM;CACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAUA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAChD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAClE,OAAO,uBAAuB,MAAM,iCAAiC,CAAC;AACtE,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,oBAAoB,MAAM,8BAA8B,CAAC;AAChE,OAAO,4BAA4B,MAAM,uCAAuC,CAAC;AACjF,OAAO,oBAAoB,MAAM,6BAA6B,CAAC;AAC/D,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,iCAAiC,MAAM,4CAA4C,CAAC;AAC3F,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,qBAAqB,MAAM,8BAA8B,CAAC;AACjE,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,WAAW;IACX,mBAAmB;IACnB,QAAQ;IACR,WAAW;IACX,sBAAsB;IACtB,mBAAmB;IACnB,UAAU;IACV,YAAY;IACZ,wBAAwB;IACxB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,uBAAuB;IACvB,gBAAgB;IAChB,oBAAoB;IACpB,4BAA4B;IAC5B,oBAAoB;IACpB,gBAAgB;IAChB,iCAAiC;IACjC,sBAAsB;IACtB,sBAAsB;IACtB,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,MAAM;CACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-scenarios-without-then.d.ts","sourceRoot":"","sources":["../../src/rules/no-scenarios-without-then.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,aAAa,CAAC;AAiBrD,QAAA,MAAM,IAAI,EAAE,QAqCX,CAAC;eAEa,IAAI"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getNodeType, resolvedStepKeywords } from '../gherkin/keywords.js';
|
|
2
|
+
import { backgroundsFor, scenariosOf } from '../gherkin/traverse.js';
|
|
3
|
+
import { mergeDefaults } from '../util/collections.js';
|
|
4
|
+
import { at } from '../util/location.js';
|
|
5
|
+
const name = 'no-scenarios-without-then';
|
|
6
|
+
const availableConfigs = {
|
|
7
|
+
/**
|
|
8
|
+
* Whether a `Then` in a Background counts for the scenarios under it.
|
|
9
|
+
*
|
|
10
|
+
* On, because a Background's steps really do run before every scenario, so
|
|
11
|
+
* a scenario relying on one is not missing anything. Turn it off if your
|
|
12
|
+
* team wants each scenario to read as a whole on its own.
|
|
13
|
+
*/
|
|
14
|
+
countBackground: true,
|
|
15
|
+
};
|
|
16
|
+
const rule = {
|
|
17
|
+
name,
|
|
18
|
+
availableConfigs,
|
|
19
|
+
run(feature, _file, configuration) {
|
|
20
|
+
if (feature === undefined) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
const { countBackground } = mergeDefaults(availableConfigs, configuration);
|
|
24
|
+
const errors = [];
|
|
25
|
+
for (const { scenario, rule: containingRule } of scenariosOf(feature)) {
|
|
26
|
+
// A scenario with no steps at all is a different mistake, and saying so
|
|
27
|
+
// twice helps nobody.
|
|
28
|
+
if (scenario.steps.length === 0) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const inherited = countBackground
|
|
32
|
+
? backgroundsFor(feature, containingRule).flatMap((background) => background.steps)
|
|
33
|
+
: [];
|
|
34
|
+
const keywords = [
|
|
35
|
+
...resolvedStepKeywords(inherited, feature.language),
|
|
36
|
+
...resolvedStepKeywords(scenario.steps, feature.language),
|
|
37
|
+
];
|
|
38
|
+
if (!keywords.includes('then')) {
|
|
39
|
+
errors.push({
|
|
40
|
+
message: `${getNodeType(scenario, feature.language)} "${scenario.name}" does not have a Then step`,
|
|
41
|
+
rule: name,
|
|
42
|
+
...at(scenario.location),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return errors;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
export default rule;
|
|
50
|
+
//# sourceMappingURL=no-scenarios-without-then.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-scenarios-without-then.js","sourceRoot":"","sources":["../../src/rules/no-scenarios-without-then.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAC,EAAE,EAAC,MAAM,qBAAqB,CAAC;AAEvC,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,gBAAgB,GAAG;IACvB;;;;;;OAMG;IACH,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,IAAI,GAAa;IACrB,IAAI;IACJ,gBAAgB;IAChB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAC,eAAe,EAAC,GAAG,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,wEAAwE;YACxE,sBAAsB;YACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,eAAe;gBAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBACnF,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG;gBACf,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;gBACpD,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;aAC1D,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,IAAI,6BAA6B;oBAClG,IAAI,EAAE,IAAI;oBACV,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-scenarios-without-when.d.ts","sourceRoot":"","sources":["../../src/rules/no-scenarios-without-when.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,aAAa,CAAC;AAiBrD,QAAA,MAAM,IAAI,EAAE,QAqCX,CAAC;eAEa,IAAI"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getNodeType, resolvedStepKeywords } from '../gherkin/keywords.js';
|
|
2
|
+
import { backgroundsFor, scenariosOf } from '../gherkin/traverse.js';
|
|
3
|
+
import { mergeDefaults } from '../util/collections.js';
|
|
4
|
+
import { at } from '../util/location.js';
|
|
5
|
+
const name = 'no-scenarios-without-when';
|
|
6
|
+
const availableConfigs = {
|
|
7
|
+
/**
|
|
8
|
+
* Whether a `When` in a Background counts for the scenarios under it.
|
|
9
|
+
*
|
|
10
|
+
* On, because a Background's steps really do run before every scenario, so
|
|
11
|
+
* a scenario relying on one is not missing anything. Turn it off if your
|
|
12
|
+
* team wants each scenario to read as a whole on its own.
|
|
13
|
+
*/
|
|
14
|
+
countBackground: true,
|
|
15
|
+
};
|
|
16
|
+
const rule = {
|
|
17
|
+
name,
|
|
18
|
+
availableConfigs,
|
|
19
|
+
run(feature, _file, configuration) {
|
|
20
|
+
if (feature === undefined) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
const { countBackground } = mergeDefaults(availableConfigs, configuration);
|
|
24
|
+
const errors = [];
|
|
25
|
+
for (const { scenario, rule: containingRule } of scenariosOf(feature)) {
|
|
26
|
+
// A scenario with no steps at all is a different mistake, and saying so
|
|
27
|
+
// twice helps nobody.
|
|
28
|
+
if (scenario.steps.length === 0) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const inherited = countBackground
|
|
32
|
+
? backgroundsFor(feature, containingRule).flatMap((background) => background.steps)
|
|
33
|
+
: [];
|
|
34
|
+
const keywords = [
|
|
35
|
+
...resolvedStepKeywords(inherited, feature.language),
|
|
36
|
+
...resolvedStepKeywords(scenario.steps, feature.language),
|
|
37
|
+
];
|
|
38
|
+
if (!keywords.includes('when')) {
|
|
39
|
+
errors.push({
|
|
40
|
+
message: `${getNodeType(scenario, feature.language)} "${scenario.name}" does not have a When step`,
|
|
41
|
+
rule: name,
|
|
42
|
+
...at(scenario.location),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return errors;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
export default rule;
|
|
50
|
+
//# sourceMappingURL=no-scenarios-without-when.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-scenarios-without-when.js","sourceRoot":"","sources":["../../src/rules/no-scenarios-without-when.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAC,EAAE,EAAC,MAAM,qBAAqB,CAAC;AAEvC,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,gBAAgB,GAAG;IACvB;;;;;;OAMG;IACH,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,IAAI,GAAa;IACrB,IAAI;IACJ,gBAAgB;IAChB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAC,eAAe,EAAC,GAAG,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,wEAAwE;YACxE,sBAAsB;YACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,eAAe;gBAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBACnF,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG;gBACf,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;gBACpD,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;aAC1D,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,IAAI,6BAA6B;oBAClG,IAAI,EAAE,IAAI;oBACV,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gurkencheck",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "A Gherkin linter/validator written in TypeScript, with no build step beyond tsc",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gherkin",
|
|
7
7
|
"cucumber",
|
|
8
|
+
"cucumberjs",
|
|
9
|
+
"cucumber-js",
|
|
10
|
+
"gherkin-lint",
|
|
11
|
+
"gherkin-linter",
|
|
12
|
+
"cucumber-lint",
|
|
8
13
|
"linter",
|
|
9
14
|
"lint",
|
|
10
|
-
"
|
|
15
|
+
"validator",
|
|
16
|
+
"static-analysis",
|
|
17
|
+
"code-quality",
|
|
18
|
+
"feature-file",
|
|
11
19
|
"feature-files",
|
|
20
|
+
"bdd",
|
|
21
|
+
"behavior-driven-development",
|
|
22
|
+
"acceptance-testing",
|
|
23
|
+
"specification-by-example",
|
|
24
|
+
"testing",
|
|
25
|
+
"tests",
|
|
26
|
+
"sarif",
|
|
12
27
|
"typescript"
|
|
13
28
|
],
|
|
14
29
|
"license": "ISC",
|