1 | const _ = require('lodash');
|
2 | const {SourceTag} = require('./lang');
|
3 | const path = require('path');
|
4 | const {exprHash} = require('./expr-hash');
|
5 |
|
6 | function tagToSimpleFilename(tag) {
|
7 | const lineParts = tag.split(path.sep);
|
8 | const fileName = lineParts[lineParts.length - 1].replace(/\).*/, '');
|
9 | const simpleName = fileName
|
10 | .split('.js:')[0]
|
11 | .replace(/\.carmi$/, '')
|
12 | .replace(/-/g, '_')
|
13 | .split('.')
|
14 | .find(x => x);
|
15 | return simpleName;
|
16 | }
|
17 |
|
18 | function generateNameFromTag(expr) {
|
19 | if (expr[0][SourceTag]) {
|
20 | const tag = expr[0][SourceTag];
|
21 | return `_${[tagToSimpleFilename(tag)].concat(tag.split(':').slice(1)).join('_')}_`;
|
22 | }
|
23 | return '';
|
24 | }
|
25 |
|
26 | function generateName(namesByExpr, expr) {
|
27 | return (
|
28 | generateNameFromTag(expr) ||
|
29 | _(expr)
|
30 | .tail()
|
31 | .reverse()
|
32 | .map(e => {
|
33 | const preNamed = namesByExpr[exprHash(e)];
|
34 | if (preNamed) {
|
35 | return preNamed;
|
36 | }
|
37 | return _.find(_.flattenDeep(e), x => typeof x === 'string') || '';
|
38 | })
|
39 | .join('')
|
40 | );
|
41 | }
|
42 |
|
43 | module.exports = {generateName, generateNameFromTag, tagToSimpleFilename};
|