mirror of
https://gitlab.com/soapbox-pub/mkstack.git
synced 2025-08-27 13:09:22 +00:00
Add custom eslint rule: no-placeholder-comments
This commit is contained in:
parent
a6eeb05d6e
commit
0e8a141490
49
eslint-rules/README.md
Normal file
49
eslint-rules/README.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# Custom ESLint Rules
|
||||||
|
|
||||||
|
This directory contains custom ESLint rules for the project.
|
||||||
|
|
||||||
|
## no-placeholder-comments
|
||||||
|
|
||||||
|
This rule detects and flags comments that start with "// In a real" (case-insensitive). These comments typically indicate placeholder implementations that should be replaced with real code.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
❌ **Bad** - These will trigger the rule:
|
||||||
|
```javascript
|
||||||
|
// In a real application, this would connect to a database
|
||||||
|
const data = [];
|
||||||
|
|
||||||
|
// in a real world scenario, this would be different
|
||||||
|
const config = {};
|
||||||
|
|
||||||
|
/* In a real implementation, we would handle errors */
|
||||||
|
const handleError = () => {};
|
||||||
|
```
|
||||||
|
|
||||||
|
✅ **Good** - These are fine:
|
||||||
|
```javascript
|
||||||
|
// This is a regular comment
|
||||||
|
const data = [];
|
||||||
|
|
||||||
|
// TODO: Implement database connection
|
||||||
|
const config = {};
|
||||||
|
|
||||||
|
// Note: In a real application, consider using a database
|
||||||
|
const handleError = () => {};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
The rule is configured in `eslint.config.js` as:
|
||||||
|
```javascript
|
||||||
|
"custom/no-placeholder-comments": "error"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can change the severity level to:
|
||||||
|
- `"off"` - Disable the rule
|
||||||
|
- `"warn"` - Show as warning
|
||||||
|
- `"error"` - Show as error (current setting)
|
||||||
|
|
||||||
|
### Purpose
|
||||||
|
|
||||||
|
This rule helps ensure that placeholder comments used during development are replaced with actual implementations before code is committed or deployed to production.
|
7
eslint-rules/index.js
Normal file
7
eslint-rules/index.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import noPlaceholderComments from './no-placeholder-comments.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
rules: {
|
||||||
|
'no-placeholder-comments': noPlaceholderComments,
|
||||||
|
},
|
||||||
|
};
|
45
eslint-rules/no-placeholder-comments.js
Normal file
45
eslint-rules/no-placeholder-comments.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* Custom ESLint rule to detect placeholder comments starting with "// In a real"
|
||||||
|
* These comments indicate incomplete implementations that should be replaced with real code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default {
|
||||||
|
meta: {
|
||||||
|
type: "problem",
|
||||||
|
docs: {
|
||||||
|
description: "Disallow placeholder comments starting with '// In a real'",
|
||||||
|
category: "Best Practices",
|
||||||
|
recommended: true,
|
||||||
|
},
|
||||||
|
fixable: null,
|
||||||
|
schema: [],
|
||||||
|
messages: {
|
||||||
|
placeholderComment: "Placeholder comment detected: '{{comment}}'. This should be replaced with a real implementation.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
create(context) {
|
||||||
|
const sourceCode = context.getSourceCode();
|
||||||
|
|
||||||
|
return {
|
||||||
|
Program() {
|
||||||
|
const comments = sourceCode.getAllComments();
|
||||||
|
|
||||||
|
comments.forEach((comment) => {
|
||||||
|
const commentText = comment.value.trim();
|
||||||
|
|
||||||
|
// Check if comment starts with "In a real" (case-insensitive)
|
||||||
|
if (commentText.toLowerCase().startsWith("in a real")) {
|
||||||
|
context.report({
|
||||||
|
node: comment,
|
||||||
|
messageId: "placeholderComment",
|
||||||
|
data: {
|
||||||
|
comment: `// ${commentText}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
@ -3,6 +3,7 @@ import globals from "globals";
|
|||||||
import reactHooks from "eslint-plugin-react-hooks";
|
import reactHooks from "eslint-plugin-react-hooks";
|
||||||
import reactRefresh from "eslint-plugin-react-refresh";
|
import reactRefresh from "eslint-plugin-react-refresh";
|
||||||
import tseslint from "typescript-eslint";
|
import tseslint from "typescript-eslint";
|
||||||
|
import customRules from "./eslint-rules/index.js";
|
||||||
|
|
||||||
export default tseslint.config(
|
export default tseslint.config(
|
||||||
{ ignores: ["dist"] },
|
{ ignores: ["dist"] },
|
||||||
@ -16,6 +17,7 @@ export default tseslint.config(
|
|||||||
plugins: {
|
plugins: {
|
||||||
"react-hooks": reactHooks,
|
"react-hooks": reactHooks,
|
||||||
"react-refresh": reactRefresh,
|
"react-refresh": reactRefresh,
|
||||||
|
"custom": customRules,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
...reactHooks.configs.recommended.rules,
|
...reactHooks.configs.recommended.rules,
|
||||||
@ -24,6 +26,7 @@ export default tseslint.config(
|
|||||||
{ allowConstantExport: true },
|
{ allowConstantExport: true },
|
||||||
],
|
],
|
||||||
"@typescript-eslint/no-unused-vars": "off",
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
|
"custom/no-placeholder-comments": "error",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user