/
scalameta.js
77 lines (65 loc) · 1.69 KB
/
scalameta.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import pkg from 'scalameta-parsers/package.json';
import defaultParserInterface from '../utils/defaultParserInterface';
const ID = 'scalameta';
const dialects = {
'Scala 2.10': 'Scala210',
'Scala 2.11': 'Scala211',
'Scala 2.12': 'Scala212',
'Scala 2.13': 'Scala213',
'Sbt 0.13.6': 'Sbt0136',
'Sbt 0.13.7': 'Sbt0137',
'Sbt 1': 'Sbt 1',
'Dotty': 'Dotty',
'Typelevel 2.11': 'Typelevel211',
'Typelevel 2.12': 'Typelevel212',
'Paradise 2.11': 'Paradise211',
'Paradise 2.12': 'Paradise212',
'Paradise Typelevel 2.11': 'ParadiseTypelevel211',
'Paradise Typelevel 2.12': 'ParadiseTypelevel212',
};
export default {
...defaultParserInterface,
id: ID,
displayName: ID,
version: pkg.version,
homepage: pkg.homepage || 'https://github.com/scalameta/scalameta',
locationProps: new Set(['pos']),
loadParser(callback) {
require(['scalameta-parsers'], callback);
},
parse(scalametaParser, code, options) {
const parsed = scalametaParser.parseSource(code, options);
const { error, lineNumber, columnNumber } = parsed;
if (error) {
const e = new SyntaxError(parsed.error);
e.lineNumber = lineNumber + 1;
e.columnNumber = columnNumber + 1;
throw e;
}
return parsed;
},
nodeToRange(node) {
if (node.pos) {
return [node.pos.start, node.pos.end];
}
},
opensByDefault(node, key) {
return node.type === 'Program'
|| key === 'body'
|| key === 'self'
|| key === 'stats';
},
getDefaultOptions() {
return {
dialect: 'Scala213',
};
},
_getSettingsConfiguration() {
return {
fields: [
['dialect', dialects],
],
required: new Set('dialect'),
};
},
};