mirror of
https://gitlab.com/soapbox-pub/mkstack.git
synced 2025-08-27 04:59: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 reactRefresh from "eslint-plugin-react-refresh";
|
||||
import tseslint from "typescript-eslint";
|
||||
import customRules from "./eslint-rules/index.js";
|
||||
|
||||
export default tseslint.config(
|
||||
{ ignores: ["dist"] },
|
||||
@ -16,6 +17,7 @@ export default tseslint.config(
|
||||
plugins: {
|
||||
"react-hooks": reactHooks,
|
||||
"react-refresh": reactRefresh,
|
||||
"custom": customRules,
|
||||
},
|
||||
rules: {
|
||||
...reactHooks.configs.recommended.rules,
|
||||
@ -24,6 +26,7 @@ export default tseslint.config(
|
||||
{ allowConstantExport: true },
|
||||
],
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"custom/no-placeholder-comments": "error",
|
||||
},
|
||||
}
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user