{"id":"d2dab1df-2df0-4ed0-bdc9-ec1b2df0b224","shortId":"vhPh9Z","kind":"skill","title":"naming-analyzer","tagline":"Suggest better variable, function, and class names based on context and conventions.","description":"# Naming Analyzer Skill\n\nSuggest better variable, function, and class names based on context and conventions.\n\n## Instructions\n\nYou are a naming convention expert. When invoked:\n\n1. **Analyze Existing Names**:\n   - Variables, constants, functions, methods\n   - Classes, interfaces, types\n   - Files and directories\n   - Database tables and columns\n   - API endpoints\n\n2. **Identify Issues**:\n   - Unclear or vague names\n   - Abbreviations that obscure meaning\n   - Inconsistent naming conventions\n   - Misleading names (name doesn't match behavior)\n   - Too short or too long names\n   - Hungarian notation misuse\n   - Single-letter variables outside loops\n\n3. **Check Conventions**:\n   - Language-specific conventions (camelCase, snake_case, PascalCase)\n   - Framework conventions (React components, Vue props)\n   - Project-specific patterns\n   - Industry standards\n\n4. **Provide Suggestions**:\n   - Better alternative names\n   - Reasoning for each suggestion\n   - Consistency improvements\n   - Contextual appropriateness\n\n## Naming Conventions by Language\n\n### JavaScript/TypeScript\n- Variables/functions: `camelCase`\n- Classes/interfaces: `PascalCase`\n- Constants: `UPPER_SNAKE_CASE`\n- Private fields: `_prefixUnderscore` or `#privateField`\n- Boolean: `is`, `has`, `can`, `should` prefixes\n\n### Python\n- Variables/functions: `snake_case`\n- Classes: `PascalCase`\n- Constants: `UPPER_SNAKE_CASE`\n- Private: `_prefix_underscore`\n- Boolean: `is_`, `has_`, `can_` prefixes\n\n### Java\n- Variables/methods: `camelCase`\n- Classes/interfaces: `PascalCase`\n- Constants: `UPPER_SNAKE_CASE`\n- Packages: `lowercase`\n\n### Go\n- Exported: `PascalCase`\n- Unexported: `camelCase`\n- Acronyms: All caps (`HTTPServer`, not `HttpServer`)\n\n## Common Naming Issues\n\n### Too Vague\n```javascript\n// ❌ Bad - Too generic\nfunction process(data) { }\nconst info = getData();\nlet temp = x;\n\n// ✓ Good - Specific and clear\nfunction processPayment(transaction) { }\nconst userProfile = getUserProfile();\nlet previousValue = x;\n```\n\n### Misleading Names\n```javascript\n// ❌ Bad - Name doesn't match behavior\nfunction getUser(id) {\n  const user = fetchUser(id);\n  user.lastLogin = Date.now();\n  saveUser(user); // Side effect! Not just \"getting\"\n  return user;\n}\n\n// ✓ Good - Name reflects actual behavior\nfunction fetchAndUpdateUserLogin(id) {\n  const user = fetchUser(id);\n  user.lastLogin = Date.now();\n  saveUser(user);\n  return user;\n}\n```\n\n### Abbreviations\n```javascript\n// ❌ Bad - Unclear abbreviations\nconst usrCfg = loadConfig();\nfunction calcTtl(arr) { }\n\n// ✓ Good - Clear and readable\nconst userConfig = loadConfig();\nfunction calculateTotal(amounts) { }\n\n// ✓ Acceptable - Well-known abbreviations\nconst htmlElement = document.getElementById('main');\nconst apiUrl = process.env.API_URL;\n```\n\n### Boolean Naming\n```javascript\n// ❌ Bad - Unclear state\nconst login = user.authenticated;\nconst status = checkUser();\n\n// ✓ Good - Clear boolean intent\nconst isLoggedIn = user.authenticated;\nconst isUserValid = checkUser();\nconst hasPermission = user.roles.includes('admin');\nconst canEditPost = isOwner || isAdmin;\nconst shouldShowNotification = isEnabled && hasUnread;\n```\n\n### Magic Numbers\n```javascript\n// ❌ Bad - Unnamed constants\nif (age > 18) { }\nsetTimeout(callback, 3600000);\n\n// ✓ Good - Named constants\nconst LEGAL_AGE = 18;\nconst ONE_HOUR_IN_MS = 60 * 60 * 1000;\n\nif (age > LEGAL_AGE) { }\nsetTimeout(callback, ONE_HOUR_IN_MS);\n```\n\n## Usage Examples\n\n```\n@naming-analyzer\n@naming-analyzer src/\n@naming-analyzer UserService.js\n@naming-analyzer --conventions\n@naming-analyzer --fix-all\n```\n\n## Report Format\n\n```markdown\n# Naming Analysis Report\n\n## Summary\n- Items analyzed: 156\n- Issues found: 23\n- Critical: 5 (misleading names)\n- Major: 12 (unclear/vague)\n- Minor: 6 (convention violations)\n\n---\n\n## Critical Issues (5)\n\n### src/services/UserService.js:45\n**Current**: `getUser(id)`\n**Issue**: Function name implies read-only but has side effects (updates lastLogin)\n**Severity**: Critical - Misleading\n**Suggestion**: `fetchAndUpdateUserLogin(id)`\n**Reason**: Name should reflect the mutation\n\n### src/utils/helpers.js:23\n**Current**: `validate(x)`\n**Issue**: Generic parameter name, unclear what's being validated\n**Severity**: Critical - Too vague\n**Suggestion**: `validateEmail(emailAddress)`\n**Reason**: Specific names improve clarity\n\n---\n\n## Major Issues (12)\n\n### src/components/DataList.jsx:12\n**Current**: `const d = new Date()`\n**Issue**: Single-letter variable in large scope\n**Severity**: Major\n**Suggestion**: `const currentDate = new Date()`\n**Reason**: Clarity and searchability\n\n### src/api/client.js:67\n**Current**: `function proc(data) {}`\n**Issue**: Abbreviated function name\n**Severity**: Major\n**Suggestion**: `function processApiResponse(data) {}`\n**Reason**: Full words are more readable\n\n### src/models/User.js:34\n**Current**: `user.active`\n**Issue**: Boolean property without prefix\n**Severity**: Major\n**Suggestion**: `user.isActive`\n**Reason**: Follow boolean naming convention\n\n### src/utils/format.js:89\n**Current**: `const MAX = 100`\n**Issue**: Generic constant name\n**Severity**: Major\n**Suggestion**: `const MAX_RETRY_ATTEMPTS = 100`\n**Reason**: Specific purpose is clearer\n\n---\n\n## Minor Issues (6)\n\n### src/config/settings.js:12\n**Current**: `const API_url = '...'`\n**Issue**: Inconsistent casing (mixing UPPER and lower)\n**Severity**: Minor\n**Suggestion**: `const API_URL = '...'` or `const apiUrl = '...'`\n**Reason**: Consistency in convention\n\n### src/helpers/string.js:45\n**Current**: `function strToNum(s) {}`\n**Issue**: Abbreviated function and parameter\n**Severity**: Minor\n**Suggestion**: `function stringToNumber(value) {}`\n**Reason**: Clarity over brevity\n\n---\n\n## Convention Violations\n\n### Inconsistent Boolean Prefixes\n**Locations**: 8 files\n**Issue**: Mixed use of `is`, `has`, `can` vs no prefix\n**Recommendation**: Standardize on boolean prefixes\n- Use `is` for state: `isActive`, `isVisible`\n- Use `has` for possession: `hasPermission`, `hasError`\n- Use `can` for ability: `canEdit`, `canDelete`\n- Use `should` for decisions: `shouldRender`, `shouldValidate`\n\n### Mixed Naming Conventions\n**Location**: src/legacy/\n**Issue**: Mix of camelCase and snake_case in JavaScript\n**Recommendation**: Convert all to camelCase for consistency\n\n---\n\n## Suggested Renaming\n\n### High Priority (Misleading or Critical)\n1. `getUser` → `fetchAndUpdateUserLogin` (src/services/UserService.js:45)\n2. `validate` → `validateEmail` (src/utils/helpers.js:23)\n3. `process` → `processPaymentTransaction` (src/payment/processor.js:67)\n\n### Medium Priority (Clarity)\n1. `d` → `currentDate` (7 locations)\n2. `temp` → `previousValue` (4 locations)\n3. `data` → `apiResponse` or more specific (12 locations)\n4. `arr` → `items`, `values`, or more specific (8 locations)\n\n### Low Priority (Convention)\n1. `active` → `isActive` (12 locations)\n2. `error` → `hasError` (6 locations)\n3. `API_url` → `API_URL` (3 locations)\n\n---\n\n## Naming Patterns to Follow\n\n### Functions/Methods\n- Verbs: `get`, `set`, `create`, `update`, `delete`, `fetch`, `calculate`, `validate`\n- Clear action: `sendEmail()`, `parseJSON()`, `formatCurrency()`\n\n### Classes\n- Nouns: `UserService`, `PaymentProcessor`, `EmailValidator`\n- Avoid generic: Don't use `Manager`, `Helper`, `Utility` unless necessary\n\n### Variables\n- Nouns or noun phrases: `user`, `emailAddress`, `totalAmount`\n- Descriptive: `userList` not `list`, `activeUsers` not `users2`\n\n### Constants\n- All caps with underscores: `MAX_RETRY_ATTEMPTS`, `DEFAULT_TIMEOUT`\n- Include units: `CACHE_DURATION_MS`, `MAX_FILE_SIZE_MB`\n\n### Booleans\n- Question form: `isValid`, `hasPermission`, `canEdit`\n- Affirmative: `isEnabled` not `isDisabled` (prefer positive)\n\n---\n\n## Refactoring Script\n\nWould you like me to create a refactoring script to apply these changes?\nThis will:\n1. Rename all suggested items\n2. Update all references\n3. Maintain git history\n4. Generate migration guide\n\n---\n\n## Best Practices\n\n✓ **DO**:\n- Use full words over abbreviations\n- Be specific and descriptive\n- Follow language conventions\n- Use consistent patterns\n- Make booleans obvious\n- Include units in constants\n\n✗ **DON'T**:\n- Use single letters (except in loops: i, j, k)\n- Use vague names (data, info, temp, x)\n- Mix naming conventions\n- Use misleading names\n- Over-abbreviate\n- Use Hungarian notation in modern code\n```\n\n## Naming Decision Tree\n\n```\nIs it a boolean?\n├─ Yes → Use is/has/can/should prefix\n└─ No → Is it a function?\n    ├─ Yes → Use verb phrase (action)\n    └─ No → Is it a class?\n        ├─ Yes → Use noun (PascalCase)\n        └─ No → Is it a constant?\n            ├─ Yes → Use UPPER_SNAKE_CASE\n            └─ No → Use descriptive noun (camelCase/snake_case)\n```\n\n## Notes\n\n- Prioritize clarity over brevity\n- Context matters (loop counters can be `i`, `j`)\n- Well-known abbreviations are okay (`html`, `api`, `url`, `id`)\n- Consistency within a project is more important than perfect naming\n- Refactor names as understanding improves\n- Use IDE rename refactoring to safely update all references","tags":["naming","analyzer","agent","toolkit","softaworks","agent-skills","automation","claude","claude-code","coding-agent","development"],"capabilities":["skill","source-softaworks","skill-naming-analyzer","topic-agent-skills","topic-automation","topic-claude","topic-claude-code","topic-coding-agent","topic-development"],"categories":["agent-toolkit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/softaworks/agent-toolkit/naming-analyzer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add softaworks/agent-toolkit","source_repo":"https://github.com/softaworks/agent-toolkit","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1847 github stars · SKILL.md body (9,031 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:58.352Z","embedding":null,"createdAt":"2026-04-18T20:27:59.704Z","updatedAt":"2026-05-18T18:52:58.352Z","lastSeenAt":"2026-05-18T18:52:58.352Z","tsv":"'1':40,701,719,749,863 '100':558,570 '1000':367 '12':419,486,488,580,735,752 '156':410 '18':349,359 '2':60,706,724,754,868 '23':413,459,710 '3':96,711,729,759,764,872 '34':536 '3600000':352 '4':119,727,737,876 '45':429,606,705 '5':415,427 '6':422,578,757 '60':365,366 '67':514,715 '7':722 '8':632,744 '89':554 'abbrevi':67,273,277,298,520,612,887,931,999 'abil':664 'accept':294 'acronym':191 'action':781,958 'activ':750 'activeus':812 'actual':258 'admin':332 'affirm':840 'age':348,358,369,371 'altern':123 'amount':293 'analysi':405 'analyz':3,17,41,382,385,389,393,397,409 'api':58,583,596,760,762,1003 'apirespons':731 'apiurl':304,600 'appli':858 'appropri':132 'arr':283,738 'attempt':569,822 'avoid':790 'bad':203,231,275,310,344 'base':11,26 'behavior':80,236,259 'best':880 'better':5,20,122 'boolean':151,170,307,321,540,550,629,647,834,899,944 'breviti':625,987 'cach':827 'calcttl':282 'calcul':778 'calculatetot':292 'callback':351,373 'camelcas':103,139,177,190,681,691 'camelcase/snake_case':982 'candelet':666 'canedit':665,839 'caneditpost':334 'cap':193,817 'case':105,145,160,166,183,587,684,977 'chang':860 'check':97 'checkus':318,328 'clariti':483,510,623,718,985 'class':9,24,48,161,785,963 'classes/interfaces':140,178 'clear':218,285,320,780 'clearer':575 'code':937 'column':57 'common':197 'compon':110 'consist':129,602,693,896,1006 'const':209,222,240,263,278,288,299,303,313,316,323,326,329,333,337,356,360,490,505,556,566,582,595,599 'constant':45,142,163,180,346,355,561,815,904,972 'context':13,28,988 'contextu':131 'convent':15,30,36,73,98,102,108,134,394,423,552,604,626,675,748,894,925 'convert':688 'counter':991 'creat':774,853 'critic':414,425,447,473,700 'current':430,460,489,515,537,555,581,607 'currentd':506,721 'd':491,720 'data':208,518,528,730,919 'databas':54 'date':493,508 'date.now':245,268 'decis':670,939 'default':823 'delet':776 'descript':808,891,980 'directori':53 'document.getelementbyid':301 'doesn':77,233 'durat':828 'effect':249,443 'emailaddress':478,806 'emailvalid':789 'endpoint':59 'error':755 'exampl':379 'except':910 'exist':42 'expert':37 'export':187 'fetch':777 'fetchandupdateuserlogin':261,450,703 'fetchus':242,265 'field':147 'file':51,633,831 'fix':399 'fix-al':398 'follow':549,769,892 'form':836 'format':402 'formatcurr':784 'found':412 'framework':107 'full':530,884 'function':7,22,46,206,219,237,260,281,291,434,516,521,526,608,613,619,953 'functions/methods':770 'generat':877 'generic':205,464,560,791 'get':252,772 'getdata':211 'getus':238,431,702 'getuserprofil':224 'git':874 'go':186 'good':215,255,284,319,353 'guid':879 'haserror':660,756 'haspermiss':330,659,838 'hasunread':340 'helper':796 'high':696 'histori':875 'hour':362,375 'html':1002 'htmlelement':300 'httpserver':194,196 'hungarian':87,933 'id':239,243,262,266,432,451,1005 'ide':1022 'identifi':61 'impli':436 'import':1012 'improv':130,482,1020 'includ':825,901 'inconsist':71,586,628 'industri':117 'info':210,920 'instruct':31 'intent':322 'interfac':49 'invok':39 'is/has/can/should':947 'isact':653,751 'isadmin':336 'isdis':843 'isen':339,841 'isloggedin':324 'isown':335 'issu':62,199,411,426,433,463,485,494,519,539,559,577,585,611,634,678 'isuservalid':327 'isvalid':837 'isvis':654 'item':408,739,867 'j':914,995 'java':175 'javascript':202,230,274,309,343,686 'javascript/typescript':137 'k':915 'known':297,998 'languag':100,136,893 'language-specif':99 'larg':500 'lastlogin':445 'legal':357,370 'let':212,225 'letter':92,497,909 'like':850 'list':811 'loadconfig':280,290 'locat':631,676,723,728,736,745,753,758,765 'login':314 'long':85 'loop':95,912,990 'low':746 'lower':591 'lowercas':185 'magic':341 'main':302 'maintain':873 'major':418,484,503,524,545,564 'make':898 'manag':795 'markdown':403 'match':79,235 'matter':989 'max':557,567,820,830 'mb':833 'mean':70 'medium':716 'method':47 'migrat':878 'minor':421,576,593,617 'mislead':74,228,416,448,698,927 'misus':89 'mix':588,635,673,679,923 'modern':936 'ms':364,377,829 'mutat':457 'name':2,10,16,25,35,43,66,72,75,76,86,124,133,198,229,232,256,308,354,381,384,388,392,396,404,417,435,453,466,481,522,551,562,674,766,918,924,928,938,1015,1017 'naming-analyz':1,380,383,387,391,395 'necessari':799 'new':492,507 'notat':88,934 'note':983 'noun':786,801,803,966,981 'number':342 'obscur':69 'obvious':900 'okay':1001 'one':361,374 'outsid':94 'over-abbrevi':929 'packag':184 'paramet':465,615 'parsejson':783 'pascalcas':106,141,162,179,188,967 'pattern':116,767,897 'paymentprocessor':788 'perfect':1014 'phrase':804,957 'posit':845 'possess':658 'practic':881 'prefer':844 'prefix':156,168,174,543,630,643,648,948 'prefixunderscor':148 'previousvalu':226,726 'priorit':984 'prioriti':697,717,747 'privat':146,167 'privatefield':150 'proc':517 'process':207,712 'process.env.api':305 'processapirespons':527 'processpay':220 'processpaymenttransact':713 'project':114,1009 'project-specif':113 'prop':112 'properti':541 'provid':120 'purpos':573 'python':157 'question':835 'react':109 'read':438 'read-on':437 'readabl':287,534 'reason':125,452,479,509,529,548,571,601,622 'recommend':644,687 'refactor':846,855,1016,1024 'refer':871,1029 'reflect':257,455 'renam':695,864,1023 'report':401,406 'retri':568,821 'return':253,271 'safe':1026 'saveus':246,269 'scope':501 'script':847,856 'searchabl':512 'sendemail':782 'set':773 'settimeout':350,372 'sever':446,472,502,523,544,563,592,616 'short':82 'shouldrend':671 'shouldshownotif':338 'shouldvalid':672 'side':248,442 'singl':91,496,908 'single-lett':90,495 'size':832 'skill':18 'skill-naming-analyzer' 'snake':104,144,159,165,182,683,976 'source-softaworks' 'specif':101,115,216,480,572,734,743,889 'src':386 'src/api/client.js':513 'src/components/datalist.jsx':487 'src/config/settings.js':579 'src/helpers/string.js':605 'src/legacy':677 'src/models/user.js':535 'src/payment/processor.js':714 'src/services/userservice.js':428,704 'src/utils/format.js':553 'src/utils/helpers.js':458,709 'standard':118,645 'state':312,652 'status':317 'stringtonumb':620 'strtonum':609 'suggest':4,19,121,128,449,476,504,525,546,565,594,618,694,866 'summari':407 'tabl':55 'temp':213,725,921 'timeout':824 'topic-agent-skills' 'topic-automation' 'topic-claude' 'topic-claude-code' 'topic-coding-agent' 'topic-development' 'totalamount':807 'transact':221 'tree':940 'type':50 'unclear':63,276,311,467 'unclear/vague':420 'underscor':169,819 'understand':1019 'unexport':189 'unit':826,902 'unless':798 'unnam':345 'updat':444,775,869,1027 'upper':143,164,181,589,975 'url':306,584,597,761,763,1004 'usag':378 'use':636,649,655,661,667,794,883,895,907,916,926,932,946,955,965,974,979,1021 'user':241,247,254,264,270,272,805 'user.active':538 'user.authenticated':315,325 'user.isactive':547 'user.lastlogin':244,267 'user.roles.includes':331 'userconfig':289 'userlist':809 'userprofil':223 'users2':814 'userservic':787 'userservice.js':390 'usrcfg':279 'util':797 'vagu':65,201,475,917 'valid':461,471,707,779 'validateemail':477,708 'valu':621,740 'variabl':6,21,44,93,498,800 'variables/functions':138,158 'variables/methods':176 'verb':771,956 'violat':424,627 'vs':641 'vue':111 'well':296,997 'well-known':295,996 'within':1007 'without':542 'word':531,885 'would':848 'x':214,227,462,922 'yes':945,954,964,973","prices":[{"id":"7d6521ef-1483-48a7-bce2-43c0df5b8958","listingId":"d2dab1df-2df0-4ed0-bdc9-ec1b2df0b224","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"softaworks","category":"agent-toolkit","install_from":"skills.sh"},"createdAt":"2026-04-18T20:27:59.704Z"}],"sources":[{"listingId":"d2dab1df-2df0-4ed0-bdc9-ec1b2df0b224","source":"github","sourceId":"softaworks/agent-toolkit/naming-analyzer","sourceUrl":"https://github.com/softaworks/agent-toolkit/tree/main/skills/naming-analyzer","isPrimary":false,"firstSeenAt":"2026-04-18T21:54:39.603Z","lastSeenAt":"2026-05-18T18:52:58.352Z"},{"listingId":"d2dab1df-2df0-4ed0-bdc9-ec1b2df0b224","source":"skills_sh","sourceId":"softaworks/agent-toolkit/naming-analyzer","sourceUrl":"https://skills.sh/softaworks/agent-toolkit/naming-analyzer","isPrimary":true,"firstSeenAt":"2026-04-18T20:27:59.704Z","lastSeenAt":"2026-05-07T22:40:52.549Z"}],"details":{"listingId":"d2dab1df-2df0-4ed0-bdc9-ec1b2df0b224","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"softaworks","slug":"naming-analyzer","github":{"repo":"softaworks/agent-toolkit","stars":1847,"topics":["agent-skills","ai","automation","claude","claude-code","coding-agent","development"],"license":"mit","html_url":"https://github.com/softaworks/agent-toolkit","pushed_at":"2026-03-05T16:46:24Z","description":"A curated collection of skills for AI coding agents. Skills are packaged instructions and scripts that extend agent capabilities across development, documentation, planning, and professional workflows.","skill_md_sha":"fa2815a200f9ff9724933fc392c7443ccb4c005b","skill_md_path":"skills/naming-analyzer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/softaworks/agent-toolkit/tree/main/skills/naming-analyzer"},"layout":"multi","source":"github","category":"agent-toolkit","frontmatter":{"name":"naming-analyzer","description":"Suggest better variable, function, and class names based on context and conventions."},"skills_sh_url":"https://skills.sh/softaworks/agent-toolkit/naming-analyzer"},"updatedAt":"2026-05-18T18:52:58.352Z"}}