-
Notifications
You must be signed in to change notification settings - Fork 97
/
ordered-imports.ts
126 lines (116 loc) 路 3.73 KB
/
ordered-imports.ts
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import { RuleConverter } from "../ruleConverter";
export const convertOrderedImports: RuleConverter = (tslintRule) => {
const argument = { ...tslintRule.ruleArguments[0] };
const notices: string[] = [];
const patternOptions = {
nocomment: true,
dot: true,
};
const importOrderRule = {
alphabetize: {
caseInsensitive: true,
order: "asc",
},
"newlines-between": "ignore",
groups: [
["builtin", "external", "internal", "unknown", "object", "type"],
"parent",
["sibling", "index"],
],
distinctGroup: false,
pathGroupsExcludedImportTypes: [],
pathGroups: [
{
pattern: "./",
patternOptions,
group: "sibling",
position: "before",
},
{
pattern: ".",
patternOptions,
group: "sibling",
position: "before",
},
{
pattern: "..",
patternOptions,
group: "parent",
position: "before",
},
{
pattern: "../",
patternOptions,
group: "parent",
position: "before",
},
],
};
switch (argument["import-sources-order"]) {
case "case-insensitive":
case "case-insensitive-legacy":
importOrderRule.alphabetize.caseInsensitive = true;
importOrderRule.alphabetize.order = "asc";
break;
case "lowercase-first":
importOrderRule.alphabetize.caseInsensitive = false;
importOrderRule.alphabetize.order = "asc";
importOrderRule.pathGroups = importOrderRule.pathGroups.concat([
{
pattern: "[a-z]*",
patternOptions,
group: "external",
position: "before",
},
{
pattern: "../[a-z]*",
patternOptions,
group: "parent",
position: "before",
},
{
pattern: "./[a-z]*",
patternOptions,
group: "sibling",
position: "before",
},
]);
break;
case "lowercase-last":
importOrderRule.alphabetize.caseInsensitive = false;
importOrderRule.alphabetize.order = "asc";
break;
case "any":
importOrderRule.alphabetize.caseInsensitive = false;
importOrderRule.alphabetize.order = "ignore";
break;
}
if (argument["grouped-imports"] === true) {
importOrderRule["newlines-between"] = "always";
}
if ("groups" in argument) {
notices.push(
"Option 'groups' is too bespoke to be converted to ESLint plugin 'eslint-plugin-import'",
);
}
if ("named-imports-order" in argument) {
notices.push(
"Option 'named-imports-order' is not supported by ESLint plugin 'eslint-plugin-import'",
);
}
if (argument["module-source-path"] === "basename") {
notices.push(
"Option 'module-source-path' with a value of 'basename' is not supported by ESLint plugin 'eslint-plugin-import'. The behavior will fallback to 'full'",
);
}
return {
plugins: ["eslint-plugin-import"],
rules: [
{
...(notices.length !== 0 && { notices }),
ruleArguments: [importOrderRule],
ruleName: "import/order",
},
],
};
};