@sun-asterisk/sunlint
Version:
☀️ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards
97 lines • 3.1 kB
JSON
{
"ruleId": "C021",
"name": "Import Organization",
"description": "T\u1ed5 ch\u1ee9c v\u00e0 s\u1eafp x\u1ebfp imports theo nh\u00f3m v\u00e0 th\u1ee9 t\u1ef1 alphabet",
"category": "code-quality",
"severity": "info",
"languages": [
"typescript",
"javascript",
"dart"
],
"version": "1.0.0",
"status": "stable",
"tags": [
"imports",
"organization",
"readability"
],
"config": {
"groups": [
{
"name": "builtin",
"description": "Built-in Node.js modules",
"patterns": [
"^(assert|buffer|child_process|cluster|crypto|dgram|dns|domain|events|fs|http|https|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|tls|tty|url|util|v8|vm|zlib)$"
]
},
{
"name": "internal",
"description": "Internal project modules",
"patterns": [
"^\\.",
"^@/",
"^~/"
]
},
{
"name": "external",
"description": "External dependencies from node_modules",
"patterns": [
"^[^.~@]"
]
}
],
"sortOrder": {
"groupOrder": [
"builtin",
"external",
"internal"
],
"withinGroup": "alphabetical"
},
"spacing": {
"requireBlankLineBetweenGroups": true,
"maxBlankLinesBetweenGroups": 1
},
"typeImports": {
"separateTypeImports": false,
"typeImportPosition": "together"
}
},
"examples": {
"violations": [
{
"language": "typescript",
"code": "import { User } from './models/User';\nimport express from 'express';\nimport fs from 'fs';\n\n// Wrong order: internal, external, builtin",
"reason": "Imports are not in correct group order"
},
{
"language": "typescript",
"code": "import express from 'express';\nimport axios from 'axios';\nimport { User } from './models/User';\nimport { Order } from './models/Order';\n\n// No blank line between groups",
"reason": "Missing blank line between external and internal groups"
},
{
"language": "typescript",
"code": "import { Order } from './models/Order';\nimport { User } from './models/User';\nimport { Customer } from './models/Customer';\n\n// Not sorted alphabetically: Order, User, Customer",
"reason": "Internal imports not sorted alphabetically"
}
],
"valid": [
{
"language": "typescript",
"code": "import fs from 'fs';\nimport path from 'path';\n\nimport axios from 'axios';\nimport express from 'express';\n\nimport { Customer } from './models/Customer';\nimport { Order } from './models/Order';\nimport { User } from './models/User';",
"reason": "Correct grouping, sorting, and spacing"
}
]
},
"fixes": {
"autoFixable": true,
"suggestions": [
"Group imports: builtin \u2192 external \u2192 internal",
"Sort imports alphabetically within each group",
"Add blank lines between groups",
"Use consistent import style (named vs default)"
]
}
}