eff-u-code 2.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/bin/fuck-u-code.js +49 -1
- package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -1
- package/dist/analyzer/concurrent-analyzer.js +20 -8
- package/dist/analyzer/concurrent-analyzer.js.map +1 -1
- package/dist/analyzer/index.d.ts +0 -3
- package/dist/analyzer/index.d.ts.map +1 -1
- package/dist/analyzer/index.js +9 -7
- package/dist/analyzer/index.js.map +1 -1
- package/dist/cli/commands/analyze.js +1 -0
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts +11 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +195 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +53 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output/json.d.ts.map +1 -1
- package/dist/cli/output/json.js +64 -0
- package/dist/cli/output/json.js.map +1 -1
- package/dist/config/schema.js +2 -2
- package/dist/i18n/locales/en.json +73 -1
- package/dist/i18n/locales/ru.json +73 -1
- package/dist/i18n/locales/zh.json +75 -3
- package/dist/mcp/server.js +4 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/metrics/complexity/cognitive.d.ts +5 -7
- package/dist/metrics/complexity/cognitive.d.ts.map +1 -1
- package/dist/metrics/complexity/cognitive.js +47 -32
- package/dist/metrics/complexity/cognitive.js.map +1 -1
- package/dist/metrics/complexity/cyclomatic.d.ts +5 -7
- package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -1
- package/dist/metrics/complexity/cyclomatic.js +47 -40
- package/dist/metrics/complexity/cyclomatic.js.map +1 -1
- package/dist/metrics/complexity/nesting-depth.d.ts +5 -7
- package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -1
- package/dist/metrics/complexity/nesting-depth.js +19 -24
- package/dist/metrics/complexity/nesting-depth.js.map +1 -1
- package/dist/metrics/index.d.ts +3 -2
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +8 -8
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/naming/convention.d.ts.map +1 -1
- package/dist/metrics/naming/convention.js +4 -0
- package/dist/metrics/naming/convention.js.map +1 -1
- package/dist/metrics/size/file-length.d.ts +5 -7
- package/dist/metrics/size/file-length.d.ts.map +1 -1
- package/dist/metrics/size/file-length.js +18 -23
- package/dist/metrics/size/file-length.js.map +1 -1
- package/dist/metrics/size/function-length.d.ts +5 -8
- package/dist/metrics/size/function-length.d.ts.map +1 -1
- package/dist/metrics/size/function-length.js +45 -30
- package/dist/metrics/size/function-length.js.map +1 -1
- package/dist/metrics/size/parameter-count.d.ts +5 -7
- package/dist/metrics/size/parameter-count.d.ts.map +1 -1
- package/dist/metrics/size/parameter-count.js +19 -24
- package/dist/metrics/size/parameter-count.js.map +1 -1
- package/dist/metrics/thresholds/language-thresholds.d.ts +30 -0
- package/dist/metrics/thresholds/language-thresholds.d.ts.map +1 -0
- package/dist/metrics/thresholds/language-thresholds.js +247 -0
- package/dist/metrics/thresholds/language-thresholds.js.map +1 -0
- package/dist/parser/index.d.ts +1 -5
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +38 -22
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/tree-sitter-parser.d.ts +3 -0
- package/dist/parser/tree-sitter-parser.d.ts.map +1 -1
- package/dist/parser/tree-sitter-parser.js +170 -26
- package/dist/parser/tree-sitter-parser.js.map +1 -1
- package/dist/parser/types.d.ts +1 -1
- package/dist/parser/types.d.ts.map +1 -1
- package/dist/parser/types.js +10 -0
- package/dist/parser/types.js.map +1 -1
- package/dist/scoring/index.d.ts +0 -3
- package/dist/scoring/index.d.ts.map +1 -1
- package/dist/scoring/index.js +0 -3
- package/dist/scoring/index.js.map +1 -1
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
package/dist/cli/output/json.js
CHANGED
|
@@ -1,9 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JSON output formatter
|
|
3
3
|
*/
|
|
4
|
+
import { t } from '../../i18n/index.js';
|
|
5
|
+
import { VERSION } from '../../version.js';
|
|
4
6
|
export class JsonOutput {
|
|
5
7
|
render(result) {
|
|
6
8
|
return JSON.stringify({
|
|
9
|
+
$schema: {
|
|
10
|
+
version: VERSION,
|
|
11
|
+
description: t('json_schema_description'),
|
|
12
|
+
fields: {
|
|
13
|
+
projectPath: t('json_field_projectPath'),
|
|
14
|
+
overallScore: t('json_field_overallScore'),
|
|
15
|
+
summary: {
|
|
16
|
+
description: t('json_field_summary'),
|
|
17
|
+
totalFiles: t('json_field_summary_totalFiles'),
|
|
18
|
+
analyzedFiles: t('json_field_summary_analyzedFiles'),
|
|
19
|
+
skippedFiles: t('json_field_summary_skippedFiles'),
|
|
20
|
+
analysisTime: t('json_field_summary_analysisTime'),
|
|
21
|
+
},
|
|
22
|
+
aggregatedMetrics: {
|
|
23
|
+
description: t('json_field_aggregatedMetrics'),
|
|
24
|
+
name: t('json_field_aggregatedMetrics_name'),
|
|
25
|
+
category: t('json_field_aggregatedMetrics_category'),
|
|
26
|
+
average: t('json_field_aggregatedMetrics_average'),
|
|
27
|
+
min: t('json_field_aggregatedMetrics_min'),
|
|
28
|
+
max: t('json_field_aggregatedMetrics_max'),
|
|
29
|
+
median: t('json_field_aggregatedMetrics_median'),
|
|
30
|
+
},
|
|
31
|
+
files: {
|
|
32
|
+
description: t('json_field_files'),
|
|
33
|
+
path: t('json_field_files_path'),
|
|
34
|
+
score: t('json_field_files_score'),
|
|
35
|
+
metrics: {
|
|
36
|
+
description: t('json_field_files_metrics'),
|
|
37
|
+
name: t('json_field_files_metrics_name'),
|
|
38
|
+
category: t('json_field_files_metrics_category'),
|
|
39
|
+
value: t('json_field_files_metrics_value'),
|
|
40
|
+
normalizedScore: t('json_field_files_metrics_normalizedScore'),
|
|
41
|
+
severity: t('json_field_files_metrics_severity'),
|
|
42
|
+
details: t('json_field_files_metrics_details'),
|
|
43
|
+
},
|
|
44
|
+
parseResult: {
|
|
45
|
+
description: t('json_field_files_parseResult'),
|
|
46
|
+
language: t('json_field_files_parseResult_language'),
|
|
47
|
+
totalLines: t('json_field_files_parseResult_totalLines'),
|
|
48
|
+
codeLines: t('json_field_files_parseResult_codeLines'),
|
|
49
|
+
commentLines: t('json_field_files_parseResult_commentLines'),
|
|
50
|
+
functionCount: t('json_field_files_parseResult_functionCount'),
|
|
51
|
+
classCount: t('json_field_files_parseResult_classCount'),
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
metricCategories: {
|
|
56
|
+
complexity: t('json_category_complexity'),
|
|
57
|
+
size: t('json_category_size'),
|
|
58
|
+
duplication: t('json_category_duplication'),
|
|
59
|
+
structure: t('json_category_structure'),
|
|
60
|
+
error: t('json_category_error'),
|
|
61
|
+
documentation: t('json_category_documentation'),
|
|
62
|
+
naming: t('json_category_naming'),
|
|
63
|
+
},
|
|
64
|
+
severityLevels: {
|
|
65
|
+
info: t('json_severity_info'),
|
|
66
|
+
warning: t('json_severity_warning'),
|
|
67
|
+
error: t('json_severity_error'),
|
|
68
|
+
critical: t('json_severity_critical'),
|
|
69
|
+
},
|
|
70
|
+
},
|
|
7
71
|
projectPath: result.projectPath,
|
|
8
72
|
overallScore: result.overallScore,
|
|
9
73
|
summary: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/cli/output/json.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/cli/output/json.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.js
CHANGED
|
@@ -6,7 +6,7 @@ import { z } from 'zod';
|
|
|
6
6
|
export const configSchema = z.object({
|
|
7
7
|
exclude: z.array(z.string()).optional().default([]),
|
|
8
8
|
include: z.array(z.string()).optional().default(['**/*']),
|
|
9
|
-
concurrency: z.number().min(1).max(32).optional().default(
|
|
9
|
+
concurrency: z.number().min(1).max(32).optional().default(2),
|
|
10
10
|
verbose: z.boolean().optional().default(false),
|
|
11
11
|
output: z
|
|
12
12
|
.object({
|
|
@@ -56,7 +56,7 @@ export const configSchema = z.object({
|
|
|
56
56
|
export const DEFAULT_CONFIG = {
|
|
57
57
|
exclude: [],
|
|
58
58
|
include: ['**/*'],
|
|
59
|
-
concurrency:
|
|
59
|
+
concurrency: 2,
|
|
60
60
|
verbose: false,
|
|
61
61
|
output: {
|
|
62
62
|
format: 'console',
|
|
@@ -316,5 +316,77 @@
|
|
|
316
316
|
"mcp_config_updated": "MCP Server configuration updated in {path}",
|
|
317
317
|
"mcp_unknown_target": "Unknown target: {target}. Supported: claude, cursor",
|
|
318
318
|
"mcp_install_example_claude": "Configure for Claude Code",
|
|
319
|
-
"mcp_install_example_cursor": "Configure for Cursor"
|
|
319
|
+
"mcp_install_example_cursor": "Configure for Cursor",
|
|
320
|
+
"cmd_uninstall_description": "Remove fuck-u-code from local system",
|
|
321
|
+
"uninstall_example": "Clean up all local files",
|
|
322
|
+
"uninstall_warning": "⚠️ This will remove fuck-u-code from your system",
|
|
323
|
+
"uninstall_items": "The following will be removed:",
|
|
324
|
+
"uninstall_item_config": "Global config file (~/.fuckucoderc.json)",
|
|
325
|
+
"uninstall_item_mcp": "MCP server entries (Claude Code, Cursor)",
|
|
326
|
+
"uninstall_item_npm": "Global npm package (eff-u-code)",
|
|
327
|
+
"uninstall_confirm": "Are you sure you want to proceed?",
|
|
328
|
+
"uninstall_cancelled": "Uninstall cancelled",
|
|
329
|
+
"uninstall_processing": "Removing fuck-u-code...",
|
|
330
|
+
"uninstall_removed_config": "Removed global config file",
|
|
331
|
+
"uninstall_no_config": "No global config file found",
|
|
332
|
+
"uninstall_removed_claude": "Removed MCP entry from Claude Code",
|
|
333
|
+
"uninstall_no_claude": "No MCP entry in Claude Code",
|
|
334
|
+
"uninstall_removed_cursor": "Removed MCP entry from Cursor",
|
|
335
|
+
"uninstall_no_cursor": "No MCP entry in Cursor",
|
|
336
|
+
"uninstall_removed_npm": "Uninstalled global npm package",
|
|
337
|
+
"uninstall_no_npm": "No global npm package found",
|
|
338
|
+
"uninstall_complete": "✓ Uninstall complete. Goodbye!",
|
|
339
|
+
"cmd_update_description": "Update eff-u-code to the latest version",
|
|
340
|
+
"cmd_update_example": "Update to latest version",
|
|
341
|
+
"update_checking": "Checking for updates...",
|
|
342
|
+
"update_current_version": "Current version",
|
|
343
|
+
"update_latest_version": "Latest version",
|
|
344
|
+
"update_already_latest": "Already on the latest version",
|
|
345
|
+
"update_updating": "Updating eff-u-code...",
|
|
346
|
+
"update_success": "Update successful!",
|
|
347
|
+
"update_updated_to": "Updated to version",
|
|
348
|
+
"update_failed": "Update failed",
|
|
349
|
+
"json_schema_description": "Code quality analysis report in JSON format",
|
|
350
|
+
"json_field_projectPath": "Absolute path to the analyzed project",
|
|
351
|
+
"json_field_overallScore": "Overall quality score (0-100, higher is better)",
|
|
352
|
+
"json_field_summary": "Summary statistics of the analysis",
|
|
353
|
+
"json_field_summary_totalFiles": "Total number of files discovered in the project",
|
|
354
|
+
"json_field_summary_analyzedFiles": "Number of files successfully analyzed",
|
|
355
|
+
"json_field_summary_skippedFiles": "Number of files skipped (too large, unsupported, etc.)",
|
|
356
|
+
"json_field_summary_analysisTime": "Total analysis time in milliseconds",
|
|
357
|
+
"json_field_aggregatedMetrics": "Aggregated metrics across all analyzed files",
|
|
358
|
+
"json_field_aggregatedMetrics_name": "Metric name (e.g., cyclomatic_complexity, cognitive_complexity)",
|
|
359
|
+
"json_field_aggregatedMetrics_category": "Metric category (complexity, size, duplication, structure, error, documentation, naming)",
|
|
360
|
+
"json_field_aggregatedMetrics_average": "Average score across all files (0-100)",
|
|
361
|
+
"json_field_aggregatedMetrics_min": "Minimum score among all files (0-100)",
|
|
362
|
+
"json_field_aggregatedMetrics_max": "Maximum score among all files (0-100)",
|
|
363
|
+
"json_field_aggregatedMetrics_median": "Median score across all files (0-100)",
|
|
364
|
+
"json_field_files": "Detailed analysis results for each file",
|
|
365
|
+
"json_field_files_path": "Relative path to the file from project root",
|
|
366
|
+
"json_field_files_score": "Overall quality score for this file (0-100)",
|
|
367
|
+
"json_field_files_metrics": "Detailed metrics for this file",
|
|
368
|
+
"json_field_files_metrics_name": "Metric name",
|
|
369
|
+
"json_field_files_metrics_category": "Metric category",
|
|
370
|
+
"json_field_files_metrics_value": "Raw metric value (e.g., complexity count, line count)",
|
|
371
|
+
"json_field_files_metrics_normalizedScore": "Normalized score (0-100, higher is better)",
|
|
372
|
+
"json_field_files_metrics_severity": "Issue severity (info, warning, error, critical)",
|
|
373
|
+
"json_field_files_metrics_details": "Human-readable details about the metric",
|
|
374
|
+
"json_field_files_parseResult": "Parse result for this file",
|
|
375
|
+
"json_field_files_parseResult_language": "Programming language detected",
|
|
376
|
+
"json_field_files_parseResult_totalLines": "Total lines including blank and comment lines",
|
|
377
|
+
"json_field_files_parseResult_codeLines": "Lines of actual code",
|
|
378
|
+
"json_field_files_parseResult_commentLines": "Lines of comments",
|
|
379
|
+
"json_field_files_parseResult_functionCount": "Number of functions/methods found",
|
|
380
|
+
"json_field_files_parseResult_classCount": "Number of classes/structs found",
|
|
381
|
+
"json_category_complexity": "Code complexity metrics (cyclomatic, cognitive, nesting)",
|
|
382
|
+
"json_category_size": "Size metrics (function length, file length, parameter count)",
|
|
383
|
+
"json_category_duplication": "Code duplication detection",
|
|
384
|
+
"json_category_structure": "Code structure analysis (nesting levels, organization)",
|
|
385
|
+
"json_category_error": "Error handling quality",
|
|
386
|
+
"json_category_documentation": "Comment and documentation coverage",
|
|
387
|
+
"json_category_naming": "Naming convention compliance",
|
|
388
|
+
"json_severity_info": "No issues detected, code quality is good",
|
|
389
|
+
"json_severity_warning": "Minor issues that should be addressed",
|
|
390
|
+
"json_severity_error": "Significant issues that need attention",
|
|
391
|
+
"json_severity_critical": "Critical issues that must be fixed"
|
|
320
392
|
}
|
|
@@ -316,5 +316,77 @@
|
|
|
316
316
|
"mcp_config_updated": "Конфигурация MCP Server обновлена в {path}",
|
|
317
317
|
"mcp_unknown_target": "Неизвестная цель: {target}. Поддерживаются: claude, cursor",
|
|
318
318
|
"mcp_install_example_claude": "Настроить для Claude Code",
|
|
319
|
-
"mcp_install_example_cursor": "Настроить для Cursor"
|
|
319
|
+
"mcp_install_example_cursor": "Настроить для Cursor",
|
|
320
|
+
"cmd_uninstall_description": "Удалить fuck-u-code из локальной системы",
|
|
321
|
+
"uninstall_example": "Очистить все локальные файлы",
|
|
322
|
+
"uninstall_warning": "⚠️ Это удалит fuck-u-code из вашей системы",
|
|
323
|
+
"uninstall_items": "Будет удалено следующее:",
|
|
324
|
+
"uninstall_item_config": "Глобальный файл конфигурации (~/.fuckucoderc.json)",
|
|
325
|
+
"uninstall_item_mcp": "Записи MCP-сервера (Claude Code, Cursor)",
|
|
326
|
+
"uninstall_item_npm": "Глобальный npm-пакет (eff-u-code)",
|
|
327
|
+
"uninstall_confirm": "Вы уверены, что хотите продолжить?",
|
|
328
|
+
"uninstall_cancelled": "Удаление отменено",
|
|
329
|
+
"uninstall_processing": "Удаление fuck-u-code...",
|
|
330
|
+
"uninstall_removed_config": "Удален глобальный файл конфигурации",
|
|
331
|
+
"uninstall_no_config": "Глобальный файл конфигурации не найден",
|
|
332
|
+
"uninstall_removed_claude": "Удалена запись MCP из Claude Code",
|
|
333
|
+
"uninstall_no_claude": "Запись MCP в Claude Code не найдена",
|
|
334
|
+
"uninstall_removed_cursor": "Удалена запись MCP из Cursor",
|
|
335
|
+
"uninstall_no_cursor": "Запись MCP в Cursor не найдена",
|
|
336
|
+
"uninstall_removed_npm": "Удален глобальный npm-пакет",
|
|
337
|
+
"uninstall_no_npm": "Глобальный npm-пакет не найден",
|
|
338
|
+
"uninstall_complete": "✓ Удаление завершено. До свидания!",
|
|
339
|
+
"cmd_update_description": "Обновить eff-u-code до последней версии",
|
|
340
|
+
"cmd_update_example": "Обновить до последней версии",
|
|
341
|
+
"update_checking": "Проверка обновлений...",
|
|
342
|
+
"update_current_version": "Текущая версия",
|
|
343
|
+
"update_latest_version": "Последняя версия",
|
|
344
|
+
"update_already_latest": "Уже установлена последняя версия",
|
|
345
|
+
"update_updating": "Обновление eff-u-code...",
|
|
346
|
+
"update_success": "Обновление успешно!",
|
|
347
|
+
"update_updated_to": "Обновлено до версии",
|
|
348
|
+
"update_failed": "Обновление не удалось",
|
|
349
|
+
"json_schema_description": "Отчет об анализе качества кода в формате JSON",
|
|
350
|
+
"json_field_projectPath": "Абсолютный путь к анализируемому проекту",
|
|
351
|
+
"json_field_overallScore": "Общая оценка качества (0-100, чем выше, тем лучше)",
|
|
352
|
+
"json_field_summary": "Сводная статистика анализа",
|
|
353
|
+
"json_field_summary_totalFiles": "Общее количество файлов, обнаруженных в проекте",
|
|
354
|
+
"json_field_summary_analyzedFiles": "Количество успешно проанализированных файлов",
|
|
355
|
+
"json_field_summary_skippedFiles": "Количество пропущенных файлов (слишком большие, неподдерживаемые и т.д.)",
|
|
356
|
+
"json_field_summary_analysisTime": "Общее время анализа в миллисекундах",
|
|
357
|
+
"json_field_aggregatedMetrics": "Агрегированные метрики по всем проанализированным файлам",
|
|
358
|
+
"json_field_aggregatedMetrics_name": "Название метрики (например, cyclomatic_complexity, cognitive_complexity)",
|
|
359
|
+
"json_field_aggregatedMetrics_category": "Категория метрики (complexity, size, duplication, structure, error, documentation, naming)",
|
|
360
|
+
"json_field_aggregatedMetrics_average": "Средняя оценка по всем файлам (0-100)",
|
|
361
|
+
"json_field_aggregatedMetrics_min": "Минимальная оценка среди всех файлов (0-100)",
|
|
362
|
+
"json_field_aggregatedMetrics_max": "Максимальная оценка среди всех файлов (0-100)",
|
|
363
|
+
"json_field_aggregatedMetrics_median": "Медианная оценка по всем файлам (0-100)",
|
|
364
|
+
"json_field_files": "Подробные результаты анализа для каждого файла",
|
|
365
|
+
"json_field_files_path": "Относительный путь к файлу от корня проекта",
|
|
366
|
+
"json_field_files_score": "Общая оценка качества для этого файла (0-100)",
|
|
367
|
+
"json_field_files_metrics": "Подробные метрики для этого файла",
|
|
368
|
+
"json_field_files_metrics_name": "Название метрики",
|
|
369
|
+
"json_field_files_metrics_category": "Категория метрики",
|
|
370
|
+
"json_field_files_metrics_value": "Исходное значение метрики (например, количество сложности, количество строк)",
|
|
371
|
+
"json_field_files_metrics_normalizedScore": "Нормализованная оценка (0-100, чем выше, тем лучше)",
|
|
372
|
+
"json_field_files_metrics_severity": "Серьезность проблемы (info, warning, error, critical)",
|
|
373
|
+
"json_field_files_metrics_details": "Читаемые детали о метрике",
|
|
374
|
+
"json_field_files_parseResult": "Результат парсинга для этого файла",
|
|
375
|
+
"json_field_files_parseResult_language": "Обнаруженный язык программирования",
|
|
376
|
+
"json_field_files_parseResult_totalLines": "Общее количество строк, включая пустые и комментарии",
|
|
377
|
+
"json_field_files_parseResult_codeLines": "Строки фактического кода",
|
|
378
|
+
"json_field_files_parseResult_commentLines": "Строки комментариев",
|
|
379
|
+
"json_field_files_parseResult_functionCount": "Количество найденных функций/методов",
|
|
380
|
+
"json_field_files_parseResult_classCount": "Количество найденных классов/структур",
|
|
381
|
+
"json_category_complexity": "Метрики сложности кода (цикломатическая, когнитивная, глубина вложенности)",
|
|
382
|
+
"json_category_size": "Метрики размера (длина функции, длина файла, количество параметров)",
|
|
383
|
+
"json_category_duplication": "Обнаружение дублирования кода",
|
|
384
|
+
"json_category_structure": "Анализ структуры кода (уровни вложенности, организация)",
|
|
385
|
+
"json_category_error": "Качество обработки ошибок",
|
|
386
|
+
"json_category_documentation": "Покрытие комментариями и документацией",
|
|
387
|
+
"json_category_naming": "Соответствие соглашениям об именовании",
|
|
388
|
+
"json_severity_info": "Проблем не обнаружено, качество кода хорошее",
|
|
389
|
+
"json_severity_warning": "Незначительные проблемы, которые следует устранить",
|
|
390
|
+
"json_severity_error": "Значительные проблемы, требующие внимания",
|
|
391
|
+
"json_severity_critical": "Критические проблемы, которые необходимо исправить"
|
|
320
392
|
}
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"report_metrics_details": "评分指标详情",
|
|
20
20
|
"report_worst_files": "最屎代码排行榜",
|
|
21
21
|
"report_conclusion": "诊断结论",
|
|
22
|
-
"report_file_score": "
|
|
22
|
+
"report_file_score": "糟糕指数: {score}",
|
|
23
23
|
"report_more_issues": "...还有 {count} 个问题实在太屎,列不完了",
|
|
24
24
|
"report_score_calc": "评分计算",
|
|
25
25
|
"report_no_issues": "恭喜!没有特别多问题的文件!",
|
|
26
|
-
"overallScore": "
|
|
26
|
+
"overallScore": "糟糕指数",
|
|
27
27
|
"worstFiles": "最屎代码排行榜",
|
|
28
28
|
"metricsSummary": "指标摘要",
|
|
29
29
|
"file": "文件",
|
|
@@ -316,5 +316,77 @@
|
|
|
316
316
|
"mcp_config_updated": "MCP Server 配置已更新至 {path}",
|
|
317
317
|
"mcp_unknown_target": "未知目标:{target}。支持:claude, cursor",
|
|
318
318
|
"mcp_install_example_claude": "配置到 Claude Code",
|
|
319
|
-
"mcp_install_example_cursor": "配置到 Cursor"
|
|
319
|
+
"mcp_install_example_cursor": "配置到 Cursor",
|
|
320
|
+
"cmd_uninstall_description": "从本地系统移除 fuck-u-code",
|
|
321
|
+
"uninstall_example": "清理所有本地文件",
|
|
322
|
+
"uninstall_warning": "⚠️ 这将从您的系统中移除 fuck-u-code",
|
|
323
|
+
"uninstall_items": "以下内容将被删除:",
|
|
324
|
+
"uninstall_item_config": "全局配置文件 (~/.fuckucoderc.json)",
|
|
325
|
+
"uninstall_item_mcp": "MCP 服务器配置 (Claude Code, Cursor)",
|
|
326
|
+
"uninstall_item_npm": "全局 npm 包 (eff-u-code)",
|
|
327
|
+
"uninstall_confirm": "确定要继续吗?",
|
|
328
|
+
"uninstall_cancelled": "已取消卸载",
|
|
329
|
+
"uninstall_processing": "正在移除 fuck-u-code...",
|
|
330
|
+
"uninstall_removed_config": "已删除全局配置文件",
|
|
331
|
+
"uninstall_no_config": "未找到全局配置文件",
|
|
332
|
+
"uninstall_removed_claude": "已从 Claude Code 移除 MCP 配置",
|
|
333
|
+
"uninstall_no_claude": "Claude Code 中无 MCP 配置",
|
|
334
|
+
"uninstall_removed_cursor": "已从 Cursor 移除 MCP 配置",
|
|
335
|
+
"uninstall_no_cursor": "Cursor 中无 MCP 配置",
|
|
336
|
+
"uninstall_removed_npm": "已卸载全局 npm 包",
|
|
337
|
+
"uninstall_no_npm": "未找到全局 npm 包",
|
|
338
|
+
"uninstall_complete": "✓ 卸载完成。再见!",
|
|
339
|
+
"cmd_update_description": "更新 eff-u-code 到最新版本",
|
|
340
|
+
"cmd_update_example": "更新到最新版本",
|
|
341
|
+
"update_checking": "正在检查更新...",
|
|
342
|
+
"update_current_version": "当前版本",
|
|
343
|
+
"update_latest_version": "最新版本",
|
|
344
|
+
"update_already_latest": "已经是最新版本",
|
|
345
|
+
"update_updating": "正在更新 eff-u-code...",
|
|
346
|
+
"update_success": "更新成功!",
|
|
347
|
+
"update_updated_to": "已更新到版本",
|
|
348
|
+
"update_failed": "更新失败",
|
|
349
|
+
"json_schema_description": "JSON 格式的代码质量分析报告",
|
|
350
|
+
"json_field_projectPath": "被分析项目的绝对路径",
|
|
351
|
+
"json_field_overallScore": "总体质量评分(0-100,越高越好)",
|
|
352
|
+
"json_field_summary": "分析统计摘要",
|
|
353
|
+
"json_field_summary_totalFiles": "项目中发现的文件总数",
|
|
354
|
+
"json_field_summary_analyzedFiles": "成功分析的文件数量",
|
|
355
|
+
"json_field_summary_skippedFiles": "跳过的文件数量(过大、不支持等)",
|
|
356
|
+
"json_field_summary_analysisTime": "总分析耗时(毫秒)",
|
|
357
|
+
"json_field_aggregatedMetrics": "所有已分析文件的聚合指标",
|
|
358
|
+
"json_field_aggregatedMetrics_name": "指标名称(如 cyclomatic_complexity、cognitive_complexity)",
|
|
359
|
+
"json_field_aggregatedMetrics_category": "指标分类(complexity、size、duplication、structure、error、documentation、naming)",
|
|
360
|
+
"json_field_aggregatedMetrics_average": "所有文件的平均评分(0-100)",
|
|
361
|
+
"json_field_aggregatedMetrics_min": "所有文件中的最低评分(0-100)",
|
|
362
|
+
"json_field_aggregatedMetrics_max": "所有文件中的最高评分(0-100)",
|
|
363
|
+
"json_field_aggregatedMetrics_median": "所有文件的中位数评分(0-100)",
|
|
364
|
+
"json_field_files": "每个文件的详细分析结果",
|
|
365
|
+
"json_field_files_path": "文件相对于项目根目录的路径",
|
|
366
|
+
"json_field_files_score": "该文件的总体质量评分(0-100)",
|
|
367
|
+
"json_field_files_metrics": "该文件的详细指标",
|
|
368
|
+
"json_field_files_metrics_name": "指标名称",
|
|
369
|
+
"json_field_files_metrics_category": "指标分类",
|
|
370
|
+
"json_field_files_metrics_value": "原始指标值(如复杂度计数、行数)",
|
|
371
|
+
"json_field_files_metrics_normalizedScore": "标准化评分(0-100,越高越好)",
|
|
372
|
+
"json_field_files_metrics_severity": "问题严重程度(info、warning、error、critical)",
|
|
373
|
+
"json_field_files_metrics_details": "关于该指标的可读详情",
|
|
374
|
+
"json_field_files_parseResult": "该文件的解析结果",
|
|
375
|
+
"json_field_files_parseResult_language": "检测到的编程语言",
|
|
376
|
+
"json_field_files_parseResult_totalLines": "总行数(包括空行和注释行)",
|
|
377
|
+
"json_field_files_parseResult_codeLines": "实际代码行数",
|
|
378
|
+
"json_field_files_parseResult_commentLines": "注释行数",
|
|
379
|
+
"json_field_files_parseResult_functionCount": "发现的函数/方法数量",
|
|
380
|
+
"json_field_files_parseResult_classCount": "发现的类/结构体数量",
|
|
381
|
+
"json_category_complexity": "代码复杂度指标(圈复杂度、认知复杂度、嵌套深度)",
|
|
382
|
+
"json_category_size": "大小指标(函数长度、文件长度、参数数量)",
|
|
383
|
+
"json_category_duplication": "代码重复检测",
|
|
384
|
+
"json_category_structure": "代码结构分析(嵌套层级、组织结构)",
|
|
385
|
+
"json_category_error": "错误处理质量",
|
|
386
|
+
"json_category_documentation": "注释和文档覆盖率",
|
|
387
|
+
"json_category_naming": "命名规范合规性",
|
|
388
|
+
"json_severity_info": "未检测到问题,代码质量良好",
|
|
389
|
+
"json_severity_warning": "应该处理的轻微问题",
|
|
390
|
+
"json_severity_error": "需要关注的重大问题",
|
|
391
|
+
"json_severity_critical": "必须修复的严重问题"
|
|
320
392
|
}
|
package/dist/mcp/server.js
CHANGED
|
@@ -15,9 +15,10 @@ import { createAIManager } from '../ai/index.js';
|
|
|
15
15
|
import { MarkdownOutput } from '../cli/output/markdown.js';
|
|
16
16
|
import { JsonOutput } from '../cli/output/json.js';
|
|
17
17
|
import { setLocale } from '../i18n/index.js';
|
|
18
|
+
import { VERSION } from '../version.js';
|
|
18
19
|
const server = new McpServer({
|
|
19
20
|
name: 'fuck-u-code',
|
|
20
|
-
version:
|
|
21
|
+
version: VERSION,
|
|
21
22
|
});
|
|
22
23
|
/**
|
|
23
24
|
* Build a RuntimeConfig from MCP tool parameters.
|
|
@@ -55,8 +56,8 @@ server.registerTool('analyze', {
|
|
|
55
56
|
format: z
|
|
56
57
|
.enum(['console', 'markdown', 'json'])
|
|
57
58
|
.optional()
|
|
58
|
-
.default('
|
|
59
|
-
.describe('Output format (
|
|
59
|
+
.default('json')
|
|
60
|
+
.describe('Output format (json for full data, markdown for summary)'),
|
|
60
61
|
top: z.number().optional().default(10).describe('Number of worst files to show'),
|
|
61
62
|
locale: z.enum(['en', 'zh', 'ru']).optional().default('en').describe('Output language'),
|
|
62
63
|
},
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,19 +7,17 @@
|
|
|
7
7
|
* - Breaks in linear flow (continue, break, goto)
|
|
8
8
|
* - Recursion
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - 9-15: Moderate cognitive load
|
|
13
|
-
* - 16-25: High cognitive load
|
|
14
|
-
* - 25+: Very high cognitive load
|
|
10
|
+
* Language-specific thresholds based on official linter defaults.
|
|
11
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
15
12
|
*/
|
|
16
13
|
import type { Metric, MetricResult, MetricCategory } from '../types.js';
|
|
17
|
-
import type { ParseResult } from '../../parser/types.js';
|
|
14
|
+
import type { ParseResult, Language } from '../../parser/types.js';
|
|
18
15
|
export declare class CognitiveComplexityMetric implements Metric {
|
|
19
16
|
readonly name = "cognitive_complexity";
|
|
20
17
|
readonly category: MetricCategory;
|
|
21
18
|
readonly weight: number;
|
|
22
|
-
|
|
19
|
+
private readonly language;
|
|
20
|
+
constructor(weight: number, language: Language);
|
|
23
21
|
calculate(parseResult: ParseResult): MetricResult;
|
|
24
22
|
}
|
|
25
23
|
//# sourceMappingURL=cognitive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,qBAAa,yBAA0B,YAAW,MAAM;IACtD,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAK9C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAiGlD"}
|
|
@@ -7,28 +7,23 @@
|
|
|
7
7
|
* - Breaks in linear flow (continue, break, goto)
|
|
8
8
|
* - Recursion
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - 9-15: Moderate cognitive load
|
|
13
|
-
* - 16-25: High cognitive load
|
|
14
|
-
* - 25+: Very high cognitive load
|
|
10
|
+
* Language-specific thresholds based on official linter defaults.
|
|
11
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
15
12
|
*/
|
|
16
13
|
import { t } from '../../i18n/index.js';
|
|
17
|
-
|
|
18
|
-
EXCELLENT: 8,
|
|
19
|
-
GOOD: 15,
|
|
20
|
-
ACCEPTABLE: 25,
|
|
21
|
-
POOR: 40,
|
|
22
|
-
};
|
|
14
|
+
import { getThresholds } from '../thresholds/language-thresholds.js';
|
|
23
15
|
export class CognitiveComplexityMetric {
|
|
24
16
|
name = 'cognitive_complexity';
|
|
25
17
|
category = 'complexity';
|
|
26
18
|
weight;
|
|
27
|
-
|
|
19
|
+
language;
|
|
20
|
+
constructor(weight, language) {
|
|
28
21
|
this.weight = weight;
|
|
22
|
+
this.language = language;
|
|
29
23
|
}
|
|
30
24
|
calculate(parseResult) {
|
|
31
25
|
const { functions, filePath } = parseResult;
|
|
26
|
+
const thresholds = getThresholds(this.language, 'cognitiveComplexity');
|
|
32
27
|
if (functions.length === 0) {
|
|
33
28
|
return {
|
|
34
29
|
name: this.name,
|
|
@@ -39,8 +34,6 @@ export class CognitiveComplexityMetric {
|
|
|
39
34
|
details: t('detail_no_functions'),
|
|
40
35
|
};
|
|
41
36
|
}
|
|
42
|
-
// Calculate cognitive complexity for each function
|
|
43
|
-
// Cognitive = base complexity + nesting penalty (nesting depth * 2)
|
|
44
37
|
let totalCognitive = 0;
|
|
45
38
|
let maxCognitive = 0;
|
|
46
39
|
const locations = [];
|
|
@@ -50,7 +43,7 @@ export class CognitiveComplexityMetric {
|
|
|
50
43
|
if (cognitive > maxCognitive) {
|
|
51
44
|
maxCognitive = cognitive;
|
|
52
45
|
}
|
|
53
|
-
if (cognitive >
|
|
46
|
+
if (cognitive > thresholds.good) {
|
|
54
47
|
locations.push({
|
|
55
48
|
filePath,
|
|
56
49
|
line: func.startLine,
|
|
@@ -60,36 +53,58 @@ export class CognitiveComplexityMetric {
|
|
|
60
53
|
}
|
|
61
54
|
}
|
|
62
55
|
const avgCognitive = totalCognitive / functions.length;
|
|
63
|
-
//
|
|
64
|
-
let
|
|
65
|
-
if (avgCognitive <=
|
|
66
|
-
|
|
56
|
+
// weighted scoring considering both average and worst-case
|
|
57
|
+
let avgScore;
|
|
58
|
+
if (avgCognitive <= thresholds.excellent) {
|
|
59
|
+
avgScore = 100;
|
|
67
60
|
}
|
|
68
|
-
else if (avgCognitive <=
|
|
69
|
-
|
|
61
|
+
else if (avgCognitive <= thresholds.good) {
|
|
62
|
+
avgScore =
|
|
70
63
|
100 -
|
|
71
|
-
((avgCognitive -
|
|
64
|
+
((avgCognitive - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
|
|
72
65
|
}
|
|
73
|
-
else if (avgCognitive <=
|
|
74
|
-
|
|
75
|
-
80 - ((avgCognitive -
|
|
66
|
+
else if (avgCognitive <= thresholds.acceptable) {
|
|
67
|
+
avgScore =
|
|
68
|
+
80 - ((avgCognitive - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
|
|
76
69
|
}
|
|
77
|
-
else if (avgCognitive <=
|
|
78
|
-
|
|
70
|
+
else if (avgCognitive <= thresholds.poor) {
|
|
71
|
+
avgScore =
|
|
79
72
|
45 -
|
|
80
|
-
((avgCognitive -
|
|
73
|
+
((avgCognitive - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
|
|
81
74
|
}
|
|
82
75
|
else {
|
|
83
|
-
|
|
76
|
+
avgScore = Math.max(0, 15 * Math.exp(-(avgCognitive - thresholds.poor) / 15));
|
|
84
77
|
}
|
|
78
|
+
let maxScore;
|
|
79
|
+
if (maxCognitive <= thresholds.excellent) {
|
|
80
|
+
maxScore = 100;
|
|
81
|
+
}
|
|
82
|
+
else if (maxCognitive <= thresholds.good) {
|
|
83
|
+
maxScore =
|
|
84
|
+
100 -
|
|
85
|
+
((maxCognitive - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
|
|
86
|
+
}
|
|
87
|
+
else if (maxCognitive <= thresholds.acceptable) {
|
|
88
|
+
maxScore =
|
|
89
|
+
80 - ((maxCognitive - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
|
|
90
|
+
}
|
|
91
|
+
else if (maxCognitive <= thresholds.poor) {
|
|
92
|
+
maxScore =
|
|
93
|
+
45 -
|
|
94
|
+
((maxCognitive - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
maxScore = Math.max(0, 15 * Math.exp(-(maxCognitive - thresholds.poor) / 15));
|
|
98
|
+
}
|
|
99
|
+
const normalizedScore = avgScore * 0.5 + maxScore * 0.5;
|
|
85
100
|
let severity;
|
|
86
|
-
if (maxCognitive <=
|
|
101
|
+
if (maxCognitive <= thresholds.good) {
|
|
87
102
|
severity = 'info';
|
|
88
103
|
}
|
|
89
|
-
else if (maxCognitive <=
|
|
104
|
+
else if (maxCognitive <= thresholds.acceptable) {
|
|
90
105
|
severity = 'warning';
|
|
91
106
|
}
|
|
92
|
-
else if (maxCognitive <=
|
|
107
|
+
else if (maxCognitive <= thresholds.poor) {
|
|
93
108
|
severity = 'error';
|
|
94
109
|
}
|
|
95
110
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cyclomatic complexity metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 11-20: Moderate complexity, consider refactoring
|
|
7
|
-
* - 21-50: High complexity, should be refactored
|
|
8
|
-
* - 50+: Very high complexity, must be refactored
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*
|
|
10
7
|
* Formula: CC = 1 + (if) + (loops) + (case) + (catch) + (&&/||) + (ternary)
|
|
11
8
|
*/
|
|
12
9
|
import type { Metric, MetricResult, MetricCategory } from '../types.js';
|
|
13
|
-
import type { ParseResult } from '../../parser/types.js';
|
|
10
|
+
import type { ParseResult, Language } from '../../parser/types.js';
|
|
14
11
|
export declare class CyclomaticComplexityMetric implements Metric {
|
|
15
12
|
readonly name = "cyclomatic_complexity";
|
|
16
13
|
readonly category: MetricCategory;
|
|
17
14
|
readonly weight: number;
|
|
18
|
-
|
|
15
|
+
private readonly language;
|
|
16
|
+
constructor(weight: number, language: Language);
|
|
19
17
|
calculate(parseResult: ParseResult): MetricResult;
|
|
20
18
|
}
|
|
21
19
|
//# sourceMappingURL=cyclomatic.d.ts.map
|