UNPKG

3.42 kBJavaScriptView Raw
1// To gen snippets in project and in ide
2// node scripts/generateSnippetsAtom.js --genFiles
3
4// To gen snippets just in ide
5// node scripts/generateSnippetsAtom.js --genFiles --justForIDE
6
7const fs = require('fs');
8const os = require('os');
9const { argv } = require('yargs');
10
11const givenSteps = require('../uiTestHelpers/stepDefinitions/commonGivenSteps');
12const whenSteps = require('../uiTestHelpers/stepDefinitions/commonWhenSteps');
13const thenSteps = require('../uiTestHelpers/stepDefinitions/commonThenSteps');
14const placeholders = require('../placeholders');
15
16const snippetsFolder = 'snippets/atom';
17
18if (!fs.existsSync('snippets')) {
19 fs.mkdirSync('snippets');
20}
21if (!fs.existsSync(snippetsFolder)) {
22 fs.mkdirSync(snippetsFolder);
23}
24
25const snippetCodes = {};
26
27let snippets = '###### cuketractor snippets start 0-o\n\n';
28
29const genSnippet = (matcher, code) => {
30 snippets +=
31` "${matcher}":
32 'prefix': '${code}'
33 'body': "${matcher}"
34`;
35};
36
37const genSnippets = (steps, type) => {
38 if (!snippetCodes[type]) {
39 snippetCodes[type] = [];
40 }
41 steps.forEach((step) => {
42 const allPlaceholders = placeholders.join('|');
43 const matcherWithReplacedPlaceholders = step.matcher
44 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${1:${p1}\}'`)
45 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${2:${p1}\}'`)
46 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${3:${p1}\}'`)
47 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${4:${p1}\}'`)
48 .replace(/\(\?\:(.*)\)\?/g, '$1');
49
50 const zeroOrManyNotMatcher = /\((.*not.*)\)\*/g;
51
52 const newMatcher = step.matcher
53 .replace(/\(\?\:(.*)\)\?/g, (match, p1) => p1.replace(/([^ ]+)/, '_$1_'))
54 .replace(/\(\?\:(.*)\)/g, '$1');
55
56 const generatedCode = `${step.path ?
57 step.path.replace(/[./]*/g, '').replace(/^(actions|checks)/g, '') : 'die'}`;
58
59 const matcher = matcherWithReplacedPlaceholders
60 .replace(zeroOrManyNotMatcher, '')
61 .replace(/\((.*)\)\*/g, '$1')
62 .replace(/\((.*)\)/g, '$1');
63 const newCode = `${type}${step.code || generatedCode}`;
64 snippetCodes[type].push(newCode);
65 genSnippet(matcher, newCode);
66
67 if (newMatcher.match(zeroOrManyNotMatcher)) {
68 const newCode2 = `${type}not${step.code || generatedCode}`;
69 const matcher2 = matcherWithReplacedPlaceholders
70 .replace(/\((.*)\)\*/g, '$1');
71 snippetCodes[type].push(newCode2);
72 genSnippet(matcher2, newCode2);
73 }
74
75 // console.log(`${type}${step.code || generatedCode}`);
76 });
77};
78snippets += '".text.plain":\n';
79genSnippets(givenSteps, 'given');
80genSnippets(whenSteps, 'when');
81genSnippets(thenSteps, 'then');
82snippets += '".feature":\n';
83genSnippets(givenSteps, 'given');
84genSnippets(whenSteps, 'when');
85genSnippets(thenSteps, 'then');
86snippets += '###### cuketractor snippets end 0-o';
87
88if (!argv.justForIDE) {
89 fs.writeFileSync(`${snippetsFolder}/atom-snippets.cson`, snippets);
90}
91
92const homedir = os.homedir();
93const atomSnippetsFile = `${homedir}/.atom/snippets.cson`;
94try {
95 const snippetsFile = fs.readFileSync(atomSnippetsFile, 'utf-8');
96 const snippetsFileNoCukeTrackor = snippetsFile.replace(/^###### cuketractor snippets start 0-o[^~]*###### cuketractor snippets end 0-o$/m, '');
97 fs.writeFileSync(atomSnippetsFile, `${snippetsFileNoCukeTrackor}${snippets}`);
98} catch (e) {
99 console.log('Atom not installed on your mac');
100}