Skip to content

Commit

Permalink
feat(eslint-plugin-formatjs): add support for .vue
Browse files Browse the repository at this point in the history
  • Loading branch information
longlho committed Jan 2, 2021
1 parent 088eb4d commit 2f73827
Show file tree
Hide file tree
Showing 19 changed files with 328 additions and 36 deletions.
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -118,7 +118,8 @@
"ts-pegjs": "0.3",
"tslib": "^2.0.1",
"typescript": "4",
"vue": "3"
"vue": "3",
"vue-eslint-parser": "^7.3.0"
},
"eslintConfig": {
"parser": "@typescript-eslint/parser",
Expand Down
26 changes: 16 additions & 10 deletions packages/eslint-plugin-formatjs/BUILD
Expand Up @@ -48,22 +48,28 @@ ts_compile(
deps = SRC_DEPS,
)

jest_test(
name = "unit",
srcs = SRCS + glob([
"tests/**/*.ts",
"tests/**/*.tsx",
"tests/**/*.snap",
"tests/**/*.js",
"tests/**/*.json",
]),
TESTS_BASE_SRCS = SRCS + glob(
[
"tests/*.ts",
],
exclude = ["tests/*.test.ts"],
)

TEST_FILES = glob([
"tests/*.test.ts",
])

[jest_test(
name = "unit-%s" % f[6:f.index(".test.ts")],
srcs = TESTS_BASE_SRCS + [f],
deps = [
"@npm//eslint",
"@npm//@typescript-eslint/parser",
"@npm//vue-eslint-parser",
"//packages/intl-messageformat-parser:types",
"//packages/ts-transformer:types",
] + SRC_DEPS,
)
) for f in TEST_FILES]

generated_file_test(
name = "tsconfig_json",
Expand Down
15 changes: 14 additions & 1 deletion packages/eslint-plugin-formatjs/rules/blacklist-elements.ts
Expand Up @@ -136,6 +136,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -145,7 +158,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node, importedMacroVars),
CallExpression: node => checkNode(context, node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
15 changes: 14 additions & 1 deletion packages/eslint-plugin-formatjs/rules/enforce-default-message.ts
Expand Up @@ -53,6 +53,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -62,7 +75,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node, importedMacroVars),
CallExpression: node => checkNode(context, node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
15 changes: 14 additions & 1 deletion packages/eslint-plugin-formatjs/rules/enforce-description.ts
Expand Up @@ -53,6 +53,19 @@ export default {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -62,7 +75,7 @@ export default {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node, importedMacroVars),
CallExpression: node => checkNode(context, node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
} as Rule.RuleModule;
15 changes: 14 additions & 1 deletion packages/eslint-plugin-formatjs/rules/enforce-id.ts
Expand Up @@ -112,6 +112,19 @@ export default {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -121,7 +134,7 @@ export default {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node, importedMacroVars),
CallExpression: node => checkNode(context, node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
} as Rule.RuleModule;
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/enforce-placeholders.ts
Expand Up @@ -129,6 +129,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -138,8 +151,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/enforce-plural-rules.ts
Expand Up @@ -111,6 +111,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -120,8 +133,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/no-camel-case.ts
Expand Up @@ -75,6 +75,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -84,8 +97,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/no-emoji.ts
Expand Up @@ -43,6 +43,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -52,8 +65,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
15 changes: 14 additions & 1 deletion packages/eslint-plugin-formatjs/rules/no-id.ts
Expand Up @@ -41,6 +41,19 @@ export default {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -50,7 +63,7 @@ export default {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node, importedMacroVars),
CallExpression: node => checkNode(context, node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
} as Rule.RuleModule;
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/no-multiple-plurals.ts
Expand Up @@ -67,6 +67,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -76,8 +89,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down
16 changes: 14 additions & 2 deletions packages/eslint-plugin-formatjs/rules/no-multiple-whitespaces.ts
Expand Up @@ -51,6 +51,19 @@ const rule: Rule.RuleModule = {
},
create(context) {
let importedMacroVars: Scope.Variable[] = [];
const callExpressionVisitor = (node: TSESTree.Node) =>
checkNode(context, node, importedMacroVars);

if (context.parserServices.defineTemplateBodyVisitor) {
return context.parserServices.defineTemplateBodyVisitor(
{
CallExpression: callExpressionVisitor,
},
{
CallExpression: callExpressionVisitor,
}
);
}
return {
ImportDeclaration: node => {
const moduleName = (node as ImportDeclaration).source.value;
Expand All @@ -60,8 +73,7 @@ const rule: Rule.RuleModule = {
},
JSXOpeningElement: (node: Node) =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: node =>
checkNode(context, node as TSESTree.Node, importedMacroVars),
CallExpression: callExpressionVisitor,
};
},
};
Expand Down

0 comments on commit 2f73827

Please sign in to comment.