@flint.fyi/plugin-flint 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +66 -65
- package/package.json +9 -8
package/dist/index.mjs
CHANGED
|
@@ -755,6 +755,71 @@ function isVolarReportSourceCodeCall(node, typeChecker) {
|
|
|
755
755
|
if (node.expression.kind === SyntaxKind.PropertyAccessExpression && node.expression.expression.kind === SyntaxKind.Identifier && node.expression.name.text === "reportSourceCode") return typeChecker.getSymbolAtLocation(node.expression.expression)?.getDeclarations()?.some((declaration) => declaration.kind === SyntaxKind.NamespaceImport && isImportedBindingFromModule(declaration, volarLanguagePackageName)) ?? false;
|
|
756
756
|
return false;
|
|
757
757
|
}
|
|
758
|
+
var unusedMessageIds_default = ruleCreator.createRule(typescriptLanguage, {
|
|
759
|
+
about: {
|
|
760
|
+
description: "Reports message IDs defined in the messages object that are never used in recognized report calls.",
|
|
761
|
+
id: "unusedMessageIds",
|
|
762
|
+
presets: ["logical"]
|
|
763
|
+
},
|
|
764
|
+
messages: { unusedMessageIds: {
|
|
765
|
+
primary: "Message ID '{{ messageId }}' is defined but never used.",
|
|
766
|
+
secondary: ["This message ID is declared in the messages object but is not referenced in any `context.report()` or built-in Flint report helper call.", "Remove unused message IDs to keep the rule configuration clean and maintainable."],
|
|
767
|
+
suggestions: ["Remove the unused message ID from the messages object."]
|
|
768
|
+
} },
|
|
769
|
+
setup(context) {
|
|
770
|
+
const unusedMessageIds = /* @__PURE__ */ new Map();
|
|
771
|
+
function collectMessageIds(node, sourceFile) {
|
|
772
|
+
const args = node.arguments[1];
|
|
773
|
+
if (args?.kind !== SyntaxKind.ObjectLiteralExpression) return;
|
|
774
|
+
const messagesProperty = findProperty(args.properties, "messages", (node) => node.kind === SyntaxKind.ObjectLiteralExpression);
|
|
775
|
+
if (!messagesProperty) return;
|
|
776
|
+
for (const prop of messagesProperty.properties) {
|
|
777
|
+
if (prop.kind !== SyntaxKind.PropertyAssignment || prop.name.kind !== SyntaxKind.Identifier) continue;
|
|
778
|
+
const messageId = prop.name.text;
|
|
779
|
+
if (!unusedMessageIds.has(messageId)) unusedMessageIds.set(messageId, getTSNodeRange(prop.name, sourceFile));
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
function detectMessageIdUsage(node, reportArgumentIndex) {
|
|
783
|
+
if (!unusedMessageIds.size) return;
|
|
784
|
+
const args = node.arguments[reportArgumentIndex];
|
|
785
|
+
if (args?.kind !== SyntaxKind.ObjectLiteralExpression) {
|
|
786
|
+
unusedMessageIds.clear();
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
const messageProperty = findProperty(args.properties, "message", (node) => node.kind === SyntaxKind.StringLiteral);
|
|
790
|
+
if (!messageProperty) {
|
|
791
|
+
unusedMessageIds.clear();
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
unusedMessageIds.delete(messageProperty.text);
|
|
795
|
+
}
|
|
796
|
+
return { visitors: {
|
|
797
|
+
CallExpression(node, { sourceFile, typeChecker }) {
|
|
798
|
+
if (isRuleCreatorCreateRule(node, typeChecker)) {
|
|
799
|
+
collectMessageIds(node, sourceFile);
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
802
|
+
if (isRuleContextReport(node, typeChecker)) {
|
|
803
|
+
detectMessageIdUsage(node, 0);
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
if (isVolarReportSourceCodeCall(node, typeChecker)) {
|
|
807
|
+
detectMessageIdUsage(node, 1);
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
},
|
|
811
|
+
"SourceFile:exit"() {
|
|
812
|
+
if (!unusedMessageIds.size) return;
|
|
813
|
+
for (const [messageId, range] of unusedMessageIds) context.report({
|
|
814
|
+
data: { messageId },
|
|
815
|
+
message: "unusedMessageIds",
|
|
816
|
+
range
|
|
817
|
+
});
|
|
818
|
+
unusedMessageIds.clear();
|
|
819
|
+
}
|
|
820
|
+
} };
|
|
821
|
+
}
|
|
822
|
+
});
|
|
758
823
|
//#endregion
|
|
759
824
|
//#region src/plugin.ts
|
|
760
825
|
const flint = createPlugin({
|
|
@@ -772,71 +837,7 @@ const flint = createPlugin({
|
|
|
772
837
|
testCaseNonStaticCode_default,
|
|
773
838
|
testCaseOnlyFlags_default,
|
|
774
839
|
testShorthands_default,
|
|
775
|
-
|
|
776
|
-
about: {
|
|
777
|
-
description: "Reports message IDs defined in the messages object that are never used in recognized report calls.",
|
|
778
|
-
id: "unusedMessageIds",
|
|
779
|
-
presets: ["logical"]
|
|
780
|
-
},
|
|
781
|
-
messages: { unusedMessageIds: {
|
|
782
|
-
primary: "Message ID '{{ messageId }}' is defined but never used.",
|
|
783
|
-
secondary: ["This message ID is declared in the messages object but is not referenced in any `context.report()` or built-in Flint report helper call.", "Remove unused message IDs to keep the rule configuration clean and maintainable."],
|
|
784
|
-
suggestions: ["Remove the unused message ID from the messages object."]
|
|
785
|
-
} },
|
|
786
|
-
setup(context) {
|
|
787
|
-
const unusedMessageIds = /* @__PURE__ */ new Map();
|
|
788
|
-
function collectMessageIds(node, sourceFile) {
|
|
789
|
-
const args = node.arguments[1];
|
|
790
|
-
if (args?.kind !== SyntaxKind.ObjectLiteralExpression) return;
|
|
791
|
-
const messagesProperty = findProperty(args.properties, "messages", (node) => node.kind === SyntaxKind.ObjectLiteralExpression);
|
|
792
|
-
if (!messagesProperty) return;
|
|
793
|
-
for (const prop of messagesProperty.properties) {
|
|
794
|
-
if (prop.kind !== SyntaxKind.PropertyAssignment || prop.name.kind !== SyntaxKind.Identifier) continue;
|
|
795
|
-
const messageId = prop.name.text;
|
|
796
|
-
if (!unusedMessageIds.has(messageId)) unusedMessageIds.set(messageId, getTSNodeRange(prop.name, sourceFile));
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
function detectMessageIdUsage(node, reportArgumentIndex) {
|
|
800
|
-
if (!unusedMessageIds.size) return;
|
|
801
|
-
const args = node.arguments[reportArgumentIndex];
|
|
802
|
-
if (args?.kind !== SyntaxKind.ObjectLiteralExpression) {
|
|
803
|
-
unusedMessageIds.clear();
|
|
804
|
-
return;
|
|
805
|
-
}
|
|
806
|
-
const messageProperty = findProperty(args.properties, "message", (node) => node.kind === SyntaxKind.StringLiteral);
|
|
807
|
-
if (!messageProperty) {
|
|
808
|
-
unusedMessageIds.clear();
|
|
809
|
-
return;
|
|
810
|
-
}
|
|
811
|
-
unusedMessageIds.delete(messageProperty.text);
|
|
812
|
-
}
|
|
813
|
-
return { visitors: {
|
|
814
|
-
CallExpression(node, { sourceFile, typeChecker }) {
|
|
815
|
-
if (isRuleCreatorCreateRule(node, typeChecker)) {
|
|
816
|
-
collectMessageIds(node, sourceFile);
|
|
817
|
-
return;
|
|
818
|
-
}
|
|
819
|
-
if (isRuleContextReport(node, typeChecker)) {
|
|
820
|
-
detectMessageIdUsage(node, 0);
|
|
821
|
-
return;
|
|
822
|
-
}
|
|
823
|
-
if (isVolarReportSourceCodeCall(node, typeChecker)) {
|
|
824
|
-
detectMessageIdUsage(node, 1);
|
|
825
|
-
return;
|
|
826
|
-
}
|
|
827
|
-
},
|
|
828
|
-
"SourceFile:exit"() {
|
|
829
|
-
if (!unusedMessageIds.size) return;
|
|
830
|
-
for (const [messageId, range] of unusedMessageIds) context.report({
|
|
831
|
-
data: { messageId },
|
|
832
|
-
message: "unusedMessageIds",
|
|
833
|
-
range
|
|
834
|
-
});
|
|
835
|
-
unusedMessageIds.clear();
|
|
836
|
-
}
|
|
837
|
-
} };
|
|
838
|
-
}
|
|
839
|
-
})
|
|
840
|
+
unusedMessageIds_default
|
|
840
841
|
]
|
|
841
842
|
});
|
|
842
843
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flint.fyi/plugin-flint",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "[Experimental] A Flint plugin for linting Flint plugins.",
|
|
5
5
|
"homepage": "https://flint.fyi/rules/flint",
|
|
6
6
|
"repository": {
|
|
@@ -22,16 +22,17 @@
|
|
|
22
22
|
"dist/"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"
|
|
26
|
-
"@flint.fyi/typescript-language": "^0.20.
|
|
25
|
+
"@flint.fyi/core": "^0.26.0",
|
|
26
|
+
"@flint.fyi/typescript-language": "^0.20.1",
|
|
27
27
|
"@flint.fyi/utils": "^0.16.0",
|
|
28
|
-
"
|
|
28
|
+
"typescript": "^6.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"@flint.fyi/
|
|
34
|
-
"
|
|
31
|
+
"@flint.fyi/build": "^0.1.0",
|
|
32
|
+
"@flint.fyi/rule-tester": "^0.19.1",
|
|
33
|
+
"@flint.fyi/volar-language": "^0.3.1",
|
|
34
|
+
"tsdown": "0.22.14",
|
|
35
|
+
"vitest": "4.1.11"
|
|
35
36
|
},
|
|
36
37
|
"engines": {
|
|
37
38
|
"node": ">=26.1.0"
|