UNPKG

4.15 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/intellij';
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 = '<templateSet group="CukeTractor">\n';
28
29const genSnippet = (matcher, code, varPlaceholders) => {
30 snippets +=
31` <template name="${code}" value="${matcher}$END$" shortcut="TAB" description="${matcher}" toReformat="false" toShortenFQNames="true">
32`;
33 varPlaceholders.forEach((placeholder, i) => {
34 snippets +=
35` <variable name="var${i + 1}" expression="&quot;${placeholder}&quot;" defaultValue="" alwaysStopAt="true" />
36`;
37 });
38 snippets +=
39` <context>
40 <option name="OTHER" value="true" />
41 </context>
42 </template>
43`;
44};
45
46const genSnippets = (steps, type) => {
47 if (!snippetCodes[type]) {
48 snippetCodes[type] = [];
49 }
50 steps.forEach((step) => {
51 const allPlaceholders = placeholders.join('|');
52 const varPlaceholders = [];
53 const matcherWithReplacedPlaceholders = step.matcher
54 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => { varPlaceholders.push(p1); return '\'$var1$\''; })
55 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => { varPlaceholders.push(p1); return '\'$var2$\''; })
56 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => { varPlaceholders.push(p1); return '\'$var3$\''; })
57 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => { varPlaceholders.push(p1); return '\'$var4$\''; })
58 .replace(/\(\?\:(.*)\)\?/g, '$1');
59
60 const zeroOrManyNotMatcher = /\((.*not.*)\)\*/g;
61
62 const newMatcher = step.matcher
63 .replace(/\(\?\:(.*)\)\?/g, (match, p1) => p1.replace(/([^ ]+)/, '_$1_'))
64 .replace(/\(\?\:(.*)\)/g, '$1');
65
66 const generatedCode = `${step.path ?
67 step.path.replace(/[./]*/g, '').replace(/^(actions|checks)/g, '') : 'die'}`;
68
69 const matcher = matcherWithReplacedPlaceholders
70 .replace(zeroOrManyNotMatcher, '')
71 .replace(/\((.*)\)\*/g, '$1')
72 .replace(/\((.*)\)/g, '$1');
73 const newCode = `${type}${step.code || generatedCode}`;
74 snippetCodes[type].push(newCode);
75 genSnippet(matcher, newCode, varPlaceholders);
76
77 if (newMatcher.match(zeroOrManyNotMatcher)) {
78 const newCode2 = `${type}not${step.code || generatedCode}`;
79 const matcher2 = matcherWithReplacedPlaceholders
80 .replace(/\((.*)\)\*/g, '$1');
81 snippetCodes[type].push(newCode2);
82 genSnippet(matcher2, newCode2, varPlaceholders);
83 }
84
85 // console.log(`${type}${step.code || generatedCode}`);
86 });
87};
88genSnippets(givenSteps, 'given');
89genSnippets(whenSteps, 'when');
90genSnippets(thenSteps, 'then');
91snippets += '</templateSet>';
92
93if (!argv.justForIDE) {
94 fs.writeFileSync(`${snippetsFolder}/cuketractor-snippets.xml`, snippets);
95}
96
97try {
98 const homedir = os.homedir();
99 const prefsFolder = `${homedir}/Library/Preferences`;
100 const files = fs.readdirSync(prefsFolder);
101 // eslint-disable-next-line
102 const intelliJFile = files.find((file) => {
103 if (fs.statSync(`${prefsFolder}/${file}`).isDirectory() && file.toLowerCase().includes('intellij')) {
104 return file;
105 }
106 });
107
108 const templatesFolder = `${prefsFolder}/${intelliJFile}/templates`;
109 if (!fs.existsSync(templatesFolder)) {
110 fs.mkdirSync(templatesFolder);
111 }
112
113 fs.writeFileSync(`${prefsFolder}/${intelliJFile}/templates/cuketractor-snippets.xml`, snippets);
114 console.log(`Live templates added to: ${prefsFolder}/${intelliJFile}/templates/cuketractor-snippets.xml`);
115} catch (e) {
116 console.log('intellij not installed on your mac');
117}
118