UNPKG

3.18 kBJavaScriptView Raw
1// To gen snippets in project and in ide
2// node scripts/generateSnippetsSublime.js --genFiles
3
4// To gen snippets just in ide
5// node scripts/generateSnippetsSublime.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 sublimeSnippetsFolder = `${os.homedir()}/Library/Application Support/Sublime Text 3/Packages/User/sublime-snippets-cuketractor`;
17
18const snippetsFolder = 'snippets/sublime';
19
20if (!fs.existsSync('snippets')) {
21 fs.mkdirSync('snippets');
22}
23if (!fs.existsSync(snippetsFolder)) {
24 fs.mkdirSync(snippetsFolder);
25}
26
27
28if (!fs.existsSync(sublimeSnippetsFolder)) {
29 fs.mkdirSync(sublimeSnippetsFolder);
30}
31
32const snippetCodes = {};
33
34const genSnippet = (matcher, code) => {
35 const snippet = `<snippet>
36 <content><![CDATA[
37${matcher.replace(/\((.*)\)/g, '$1')}
38]]></content>
39 <tabTrigger>${code}</tabTrigger>
40</snippet>`;
41
42 if (!argv.justForIDE) {
43 fs.writeFileSync(`${snippetsFolder}/${code}.sublime-snippet`, snippet);
44 }
45
46 try {
47 fs.writeFileSync(`${sublimeSnippetsFolder}/${code}.sublime-snippet`, snippet);
48 } catch (e) {
49 console.log('Sublime not installed on your mac');
50 }
51};
52
53const genSnippets = (steps, type) => {
54 if (!snippetCodes[type]) {
55 snippetCodes[type] = [];
56 }
57 steps.forEach((step) => {
58 const allPlaceholders = placeholders.join('|');
59 const matcherWithReplacedPlaceholders = step.matcher
60 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${1:${p1}\}'`)
61 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${2:${p1}\}'`)
62 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${3:${p1}\}'`)
63 .replace(new RegExp(`'(${allPlaceholders})'`), (m, p1) => `'\${4:${p1}\}'`)
64 .replace(/\(\?\:(.*)\)\?/g, '$1');
65
66 const zeroOrManyNotMatcher = /\((.*not.*)\)\*/g;
67 const newMatcher = step.matcher
68 .replace(/\(\?\:(.*)\)\?/g, (match, p1) =>
69 p1.replace(/([^ ]+)/, '_$1_'))
70 .replace(/\(\?\:(.*)\)/g, '$1');
71
72 const generatedCode = `${step.path ?
73 step.path.replace(/[./]*/g, '').replace(/^(actions|checks)/g, '') : 'die'}`;
74
75 const matcher = matcherWithReplacedPlaceholders
76 .replace(zeroOrManyNotMatcher, '')
77 .replace(/\((.*)\)\*/g, '$1');
78
79 const newCode = `${type}${step.code || generatedCode}`;
80 snippetCodes[type].push(newCode);
81 genSnippet(matcher, newCode);
82
83 if (newMatcher.match(zeroOrManyNotMatcher)) {
84 const newCode2 = `${type}not${step.code || generatedCode}`;
85 const matcher2 = matcherWithReplacedPlaceholders
86 .replace(/\((.*)\)\*/g, '$1');
87 snippetCodes[type].push(newCode2);
88 genSnippet(matcher2, newCode2);
89 }
90
91 // console.log(`${type}${step.code || generatedCode}`);
92 });
93};
94
95genSnippets(givenSteps, 'given');
96genSnippets(whenSteps, 'when');
97genSnippets(thenSteps, 'then');
98
99module.exports = snippetCodes;