naming-analyzer by softaworks/agent-toolkit
npx skills add https://github.com/softaworks/agent-toolkit --skill naming-analyzer根据上下文和惯例建议更好的变量、函数和类名。
您是一位命名规范专家。当被调用时:
分析现有名称:
识别问题:
检查约定:
提供建议:
camelCase广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
PascalCaseUPPER_SNAKE_CASE_prefixUnderscore 或 #privateFieldis、has、can、should 前缀snake_casePascalCaseUPPER_SNAKE_CASE_prefix_underscoreis_、has_、can_ 前缀camelCasePascalCaseUPPER_SNAKE_CASElowercasePascalCasecamelCaseHTTPServer,而非 HttpServer)// ❌ 不好 - 太通用
function process(data) { }
const info = getData();
let temp = x;
// ✓ 好 - 具体且清晰
function processPayment(transaction) { }
const userProfile = getUserProfile();
let previousValue = x;
// ❌ 不好 - 名称与行为不匹配
function getUser(id) {
const user = fetchUser(id);
user.lastLogin = Date.now();
saveUser(user); // 副作用!不仅仅是"获取"
return user;
}
// ✓ 好 - 名称反映实际行为
function fetchAndUpdateUserLogin(id) {
const user = fetchUser(id);
user.lastLogin = Date.now();
saveUser(user);
return user;
}
// ❌ 不好 - 不清晰的缩写
const usrCfg = loadConfig();
function calcTtl(arr) { }
// ✓ 好 - 清晰且可读
const userConfig = loadConfig();
function calculateTotal(amounts) { }
// ✓ 可接受 - 众所周知的缩写
const htmlElement = document.getElementById('main');
const apiUrl = process.env.API_URL;
// ❌ 不好 - 状态不清晰
const login = user.authenticated;
const status = checkUser();
// ✓ 好 - 清晰的布尔意图
const isLoggedIn = user.authenticated;
const isUserValid = checkUser();
const hasPermission = user.roles.includes('admin');
const canEditPost = isOwner || isAdmin;
const shouldShowNotification = isEnabled && hasUnread;
// ❌ 不好 - 未命名的常量
if (age > 18) { }
setTimeout(callback, 3600000);
// ✓ 好 - 命名的常量
const LEGAL_AGE = 18;
const ONE_HOUR_IN_MS = 60 * 60 * 1000;
if (age > LEGAL_AGE) { }
setTimeout(callback, ONE_HOUR_IN_MS);
@naming-analyzer
@naming-analyzer src/
@naming-analyzer UserService.js
@naming-analyzer --conventions
@naming-analyzer --fix-all
# 命名分析报告
## 摘要
- 分析项目数:156
- 发现问题数:23
- 关键问题:5(误导性名称)
- 主要问题:12(不清晰/模糊)
- 次要问题:6(约定违规)
---
## 关键问题(5)
### src/services/UserService.js:45
**当前名称**:`getUser(id)`
**问题**:函数名暗示只读但具有副作用(更新 lastLogin)
**严重性**:关键 - 误导性
**建议**:`fetchAndUpdateUserLogin(id)`
**理由**:名称应反映变更操作
### src/utils/helpers.js:23
**当前名称**:`validate(x)`
**问题**:通用参数名,不清楚验证什么
**严重性**:关键 - 过于模糊
**建议**:`validateEmail(emailAddress)`
**理由**:具体名称提高清晰度
---
## 主要问题(12)
### src/components/DataList.jsx:12
**当前名称**:`const d = new Date()`
**问题**:大作用域中的单字母变量
**严重性**:主要
**建议**:`const currentDate = new Date()`
**理由**:提高清晰度和可搜索性
### src/api/client.js:67
**当前名称**:`function proc(data) {}`
**问题**:函数名缩写
**严重性**:主要
**建议**:`function processApiResponse(data) {}`
**理由**:完整单词更易读
### src/models/User.js:34
**当前名称**:`user.active`
**问题**:布尔属性没有前缀
**严重性**:主要
**建议**:`user.isActive`
**理由**:遵循布尔命名约定
### src/utils/format.js:89
**当前名称**:`const MAX = 100`
**问题**:通用常量名
**严重性**:主要
**建议**:`const MAX_RETRY_ATTEMPTS = 100`
**理由**:具体用途更清晰
---
## 次要问题(6)
### src/config/settings.js:12
**当前名称**:`const API_url = '...'`
**问题**:大小写不一致(混合大写和小写)
**严重性**:次要
**建议**:`const API_URL = '...'` 或 `const apiUrl = '...'`
**理由**:约定一致性
### src/helpers/string.js:45
**当前名称**:`function strToNum(s) {}`
**问题**:函数和参数缩写
**严重性**:次要
**建议**:`function stringToNumber(value) {}`
**理由**:清晰度优于简洁性
---
## 约定违规
### 不一致的布尔前缀
**位置**:8 个文件
**问题**:混合使用 `is`、`has`、`can` 与无前缀
**建议**:标准化布尔前缀
- 使用 `is` 表示状态:`isActive`、`isVisible`
- 使用 `has` 表示拥有:`hasPermission`、`hasError`
- 使用 `can` 表示能力:`canEdit`、`canDelete`
- 使用 `should` 表示决策:`shouldRender`、`shouldValidate`
### 混合命名约定
**位置**:src/legacy/
**问题**:JavaScript 中混合使用 camelCase 和 snake_case
**建议**:将所有转换为 camelCase 以保持一致性
---
## 建议的重命名
### 高优先级(误导性或关键)
1. `getUser` → `fetchAndUpdateUserLogin` (src/services/UserService.js:45)
2. `validate` → `validateEmail` (src/utils/helpers.js:23)
3. `process` → `processPaymentTransaction` (src/payment/processor.js:67)
### 中优先级(清晰度)
1. `d` → `currentDate` (7 个位置)
2. `temp` → `previousValue` (4 个位置)
3. `data` → `apiResponse` 或更具体的名称 (12 个位置)
4. `arr` → `items`、`values` 或更具体的名称 (8 个位置)
### 低优先级(约定)
1. `active` → `isActive` (12 个位置)
2. `error` → `hasError` (6 个位置)
3. `API_url` → `API_URL` (3 个位置)
---
## 应遵循的命名模式
### 函数/方法
- 动词:`get`、`set`、`create`、`update`、`delete`、`fetch`、`calculate`、`validate`
- 清晰的动作:`sendEmail()`、`parseJSON()`、`formatCurrency()`
### 类
- 名词:`UserService`、`PaymentProcessor`、`EmailValidator`
- 避免通用:除非必要,不要使用 `Manager`、`Helper`、`Utility`
### 变量
- 名词或名词短语:`user`、`emailAddress`、`totalAmount`
- 描述性:使用 `userList` 而非 `list`,使用 `activeUsers` 而非 `users2`
### 常量
- 全部大写加下划线:`MAX_RETRY_ATTEMPTS`、`DEFAULT_TIMEOUT`
- 包含单位:`CACHE_DURATION_MS`、`MAX_FILE_SIZE_MB`
### 布尔值
- 问题形式:`isValid`、`hasPermission`、`canEdit`
- 肯定形式:使用 `isEnabled` 而非 `isDisabled`(倾向于肯定形式)
---
## 重构脚本
您希望我创建一个重构脚本来应用这些更改吗?
这将:
1. 重命名所有建议的项目
2. 更新所有引用
3. 维护 git 历史记录
4. 生成迁移指南
---
## 最佳实践
✓ **应该**:
- 使用完整单词而非缩写
- 具体且具有描述性
- 遵循语言约定
- 使用一致的模式
- 使布尔值意图明显
- 在常量中包含单位
✗ **不应该**:
- 使用单字母(循环中除外:i、j、k)
- 使用模糊名称(data、info、temp、x)
- 混合命名约定
- 使用误导性名称
- 过度缩写
- 在现代代码中使用匈牙利命名法
Is it a boolean?
├─ Yes → Use is/has/can/should prefix
└─ No → Is it a function?
├─ Yes → Use verb phrase (action)
└─ No → Is it a class?
├─ Yes → Use noun (PascalCase)
└─ No → Is it a constant?
├─ Yes → Use UPPER_SNAKE_CASE
└─ No → Use descriptive noun (camelCase/snake_case)
i、j)html、api、url、id)每周安装量
562
代码仓库
GitHub 星标数
1.2K
首次出现时间
Jan 20, 2026
安全审计
安装于
codex403
gemini-cli403
cursor403
claude-code402
opencode399
cline398
Suggest better variable, function, and class names based on context and conventions.
You are a naming convention expert. When invoked:
Analyze Existing Names :
Identify Issues :
Check Conventions :
Provide Suggestions :
camelCasePascalCaseUPPER_SNAKE_CASE_prefixUnderscore or #privateFieldis, has, can, should prefixessnake_casePascalCaseUPPER_SNAKE_CASE_prefix_underscoreis_, has_, can_ prefixescamelCasePascalCaseUPPER_SNAKE_CASElowercasePascalCasecamelCaseHTTPServer, not HttpServer)// ❌ Bad - Too generic
function process(data) { }
const info = getData();
let temp = x;
// ✓ Good - Specific and clear
function processPayment(transaction) { }
const userProfile = getUserProfile();
let previousValue = x;
// ❌ Bad - Name doesn't match behavior
function getUser(id) {
const user = fetchUser(id);
user.lastLogin = Date.now();
saveUser(user); // Side effect! Not just "getting"
return user;
}
// ✓ Good - Name reflects actual behavior
function fetchAndUpdateUserLogin(id) {
const user = fetchUser(id);
user.lastLogin = Date.now();
saveUser(user);
return user;
}
// ❌ Bad - Unclear abbreviations
const usrCfg = loadConfig();
function calcTtl(arr) { }
// ✓ Good - Clear and readable
const userConfig = loadConfig();
function calculateTotal(amounts) { }
// ✓ Acceptable - Well-known abbreviations
const htmlElement = document.getElementById('main');
const apiUrl = process.env.API_URL;
// ❌ Bad - Unclear state
const login = user.authenticated;
const status = checkUser();
// ✓ Good - Clear boolean intent
const isLoggedIn = user.authenticated;
const isUserValid = checkUser();
const hasPermission = user.roles.includes('admin');
const canEditPost = isOwner || isAdmin;
const shouldShowNotification = isEnabled && hasUnread;
// ❌ Bad - Unnamed constants
if (age > 18) { }
setTimeout(callback, 3600000);
// ✓ Good - Named constants
const LEGAL_AGE = 18;
const ONE_HOUR_IN_MS = 60 * 60 * 1000;
if (age > LEGAL_AGE) { }
setTimeout(callback, ONE_HOUR_IN_MS);
@naming-analyzer
@naming-analyzer src/
@naming-analyzer UserService.js
@naming-analyzer --conventions
@naming-analyzer --fix-all
# Naming Analysis Report
## Summary
- Items analyzed: 156
- Issues found: 23
- Critical: 5 (misleading names)
- Major: 12 (unclear/vague)
- Minor: 6 (convention violations)
---
## Critical Issues (5)
### src/services/UserService.js:45
**Current**: `getUser(id)`
**Issue**: Function name implies read-only but has side effects (updates lastLogin)
**Severity**: Critical - Misleading
**Suggestion**: `fetchAndUpdateUserLogin(id)`
**Reason**: Name should reflect the mutation
### src/utils/helpers.js:23
**Current**: `validate(x)`
**Issue**: Generic parameter name, unclear what's being validated
**Severity**: Critical - Too vague
**Suggestion**: `validateEmail(emailAddress)`
**Reason**: Specific names improve clarity
---
## Major Issues (12)
### src/components/DataList.jsx:12
**Current**: `const d = new Date()`
**Issue**: Single-letter variable in large scope
**Severity**: Major
**Suggestion**: `const currentDate = new Date()`
**Reason**: Clarity and searchability
### src/api/client.js:67
**Current**: `function proc(data) {}`
**Issue**: Abbreviated function name
**Severity**: Major
**Suggestion**: `function processApiResponse(data) {}`
**Reason**: Full words are more readable
### src/models/User.js:34
**Current**: `user.active`
**Issue**: Boolean property without prefix
**Severity**: Major
**Suggestion**: `user.isActive`
**Reason**: Follow boolean naming convention
### src/utils/format.js:89
**Current**: `const MAX = 100`
**Issue**: Generic constant name
**Severity**: Major
**Suggestion**: `const MAX_RETRY_ATTEMPTS = 100`
**Reason**: Specific purpose is clearer
---
## Minor Issues (6)
### src/config/settings.js:12
**Current**: `const API_url = '...'`
**Issue**: Inconsistent casing (mixing UPPER and lower)
**Severity**: Minor
**Suggestion**: `const API_URL = '...'` or `const apiUrl = '...'`
**Reason**: Consistency in convention
### src/helpers/string.js:45
**Current**: `function strToNum(s) {}`
**Issue**: Abbreviated function and parameter
**Severity**: Minor
**Suggestion**: `function stringToNumber(value) {}`
**Reason**: Clarity over brevity
---
## Convention Violations
### Inconsistent Boolean Prefixes
**Locations**: 8 files
**Issue**: Mixed use of `is`, `has`, `can` vs no prefix
**Recommendation**: Standardize on boolean prefixes
- Use `is` for state: `isActive`, `isVisible`
- Use `has` for possession: `hasPermission`, `hasError`
- Use `can` for ability: `canEdit`, `canDelete`
- Use `should` for decisions: `shouldRender`, `shouldValidate`
### Mixed Naming Conventions
**Location**: src/legacy/
**Issue**: Mix of camelCase and snake_case in JavaScript
**Recommendation**: Convert all to camelCase for consistency
---
## Suggested Renaming
### High Priority (Misleading or Critical)
1. `getUser` → `fetchAndUpdateUserLogin` (src/services/UserService.js:45)
2. `validate` → `validateEmail` (src/utils/helpers.js:23)
3. `process` → `processPaymentTransaction` (src/payment/processor.js:67)
### Medium Priority (Clarity)
1. `d` → `currentDate` (7 locations)
2. `temp` → `previousValue` (4 locations)
3. `data` → `apiResponse` or more specific (12 locations)
4. `arr` → `items`, `values`, or more specific (8 locations)
### Low Priority (Convention)
1. `active` → `isActive` (12 locations)
2. `error` → `hasError` (6 locations)
3. `API_url` → `API_URL` (3 locations)
---
## Naming Patterns to Follow
### Functions/Methods
- Verbs: `get`, `set`, `create`, `update`, `delete`, `fetch`, `calculate`, `validate`
- Clear action: `sendEmail()`, `parseJSON()`, `formatCurrency()`
### Classes
- Nouns: `UserService`, `PaymentProcessor`, `EmailValidator`
- Avoid generic: Don't use `Manager`, `Helper`, `Utility` unless necessary
### Variables
- Nouns or noun phrases: `user`, `emailAddress`, `totalAmount`
- Descriptive: `userList` not `list`, `activeUsers` not `users2`
### Constants
- All caps with underscores: `MAX_RETRY_ATTEMPTS`, `DEFAULT_TIMEOUT`
- Include units: `CACHE_DURATION_MS`, `MAX_FILE_SIZE_MB`
### Booleans
- Question form: `isValid`, `hasPermission`, `canEdit`
- Affirmative: `isEnabled` not `isDisabled` (prefer positive)
---
## Refactoring Script
Would you like me to create a refactoring script to apply these changes?
This will:
1. Rename all suggested items
2. Update all references
3. Maintain git history
4. Generate migration guide
---
## Best Practices
✓ **DO**:
- Use full words over abbreviations
- Be specific and descriptive
- Follow language conventions
- Use consistent patterns
- Make booleans obvious
- Include units in constants
✗ **DON'T**:
- Use single letters (except in loops: i, j, k)
- Use vague names (data, info, temp, x)
- Mix naming conventions
- Use misleading names
- Over-abbreviate
- Use Hungarian notation in modern code
Is it a boolean?
├─ Yes → Use is/has/can/should prefix
└─ No → Is it a function?
├─ Yes → Use verb phrase (action)
└─ No → Is it a class?
├─ Yes → Use noun (PascalCase)
└─ No → Is it a constant?
├─ Yes → Use UPPER_SNAKE_CASE
└─ No → Use descriptive noun (camelCase/snake_case)
i, j)html, api, url, id)Weekly Installs
562
Repository
GitHub Stars
1.2K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex403
gemini-cli403
cursor403
claude-code402
opencode399
cline398
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
138,300 周安装