eff-u-code 2.0.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.
Files changed (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/bin/fuck-u-code-mcp.js +2 -0
  4. package/bin/fuck-u-code.js +2 -0
  5. package/bin/postinstall.js +53 -0
  6. package/dist/ai/index.d.ts +34 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js +227 -0
  9. package/dist/ai/index.js.map +1 -0
  10. package/dist/ai/prompts/code-review.d.ts +9 -0
  11. package/dist/ai/prompts/code-review.d.ts.map +1 -0
  12. package/dist/ai/prompts/code-review.js +61 -0
  13. package/dist/ai/prompts/code-review.js.map +1 -0
  14. package/dist/ai/providers/anthropic.d.ts +11 -0
  15. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  16. package/dist/ai/providers/anthropic.js +60 -0
  17. package/dist/ai/providers/anthropic.js.map +1 -0
  18. package/dist/ai/providers/fetch.d.ts +10 -0
  19. package/dist/ai/providers/fetch.d.ts.map +1 -0
  20. package/dist/ai/providers/fetch.js +50 -0
  21. package/dist/ai/providers/fetch.js.map +1 -0
  22. package/dist/ai/providers/gemini.d.ts +12 -0
  23. package/dist/ai/providers/gemini.d.ts.map +1 -0
  24. package/dist/ai/providers/gemini.js +66 -0
  25. package/dist/ai/providers/gemini.js.map +1 -0
  26. package/dist/ai/providers/ollama.d.ts +11 -0
  27. package/dist/ai/providers/ollama.d.ts.map +1 -0
  28. package/dist/ai/providers/ollama.js +54 -0
  29. package/dist/ai/providers/ollama.js.map +1 -0
  30. package/dist/ai/providers/openai.d.ts +11 -0
  31. package/dist/ai/providers/openai.d.ts.map +1 -0
  32. package/dist/ai/providers/openai.js +52 -0
  33. package/dist/ai/providers/openai.js.map +1 -0
  34. package/dist/ai/selector.d.ts +19 -0
  35. package/dist/ai/selector.d.ts.map +1 -0
  36. package/dist/ai/selector.js +145 -0
  37. package/dist/ai/selector.js.map +1 -0
  38. package/dist/ai/types.d.ts +120 -0
  39. package/dist/ai/types.d.ts.map +1 -0
  40. package/dist/ai/types.js +6 -0
  41. package/dist/ai/types.js.map +1 -0
  42. package/dist/analyzer/concurrent-analyzer.d.ts +11 -0
  43. package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -0
  44. package/dist/analyzer/concurrent-analyzer.js +67 -0
  45. package/dist/analyzer/concurrent-analyzer.js.map +1 -0
  46. package/dist/analyzer/file-discovery.d.ts +23 -0
  47. package/dist/analyzer/file-discovery.d.ts.map +1 -0
  48. package/dist/analyzer/file-discovery.js +64 -0
  49. package/dist/analyzer/file-discovery.js.map +1 -0
  50. package/dist/analyzer/index.d.ts +27 -0
  51. package/dist/analyzer/index.d.ts.map +1 -0
  52. package/dist/analyzer/index.js +64 -0
  53. package/dist/analyzer/index.js.map +1 -0
  54. package/dist/cli/commands/ai-review.d.ts +6 -0
  55. package/dist/cli/commands/ai-review.d.ts.map +1 -0
  56. package/dist/cli/commands/ai-review.js +213 -0
  57. package/dist/cli/commands/ai-review.js.map +1 -0
  58. package/dist/cli/commands/analyze.d.ts +6 -0
  59. package/dist/cli/commands/analyze.d.ts.map +1 -0
  60. package/dist/cli/commands/analyze.js +145 -0
  61. package/dist/cli/commands/analyze.js.map +1 -0
  62. package/dist/cli/commands/config.d.ts +6 -0
  63. package/dist/cli/commands/config.d.ts.map +1 -0
  64. package/dist/cli/commands/config.js +147 -0
  65. package/dist/cli/commands/config.js.map +1 -0
  66. package/dist/cli/commands/mcp-install.d.ts +9 -0
  67. package/dist/cli/commands/mcp-install.d.ts.map +1 -0
  68. package/dist/cli/commands/mcp-install.js +102 -0
  69. package/dist/cli/commands/mcp-install.js.map +1 -0
  70. package/dist/cli/index.d.ts +7 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +69 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/output/ai-review-output.d.ts +20 -0
  75. package/dist/cli/output/ai-review-output.d.ts.map +1 -0
  76. package/dist/cli/output/ai-review-output.js +324 -0
  77. package/dist/cli/output/ai-review-output.js.map +1 -0
  78. package/dist/cli/output/console.d.ts +31 -0
  79. package/dist/cli/output/console.d.ts.map +1 -0
  80. package/dist/cli/output/console.js +571 -0
  81. package/dist/cli/output/console.js.map +1 -0
  82. package/dist/cli/output/html.d.ts +20 -0
  83. package/dist/cli/output/html.d.ts.map +1 -0
  84. package/dist/cli/output/html.js +339 -0
  85. package/dist/cli/output/html.js.map +1 -0
  86. package/dist/cli/output/json.d.ts +8 -0
  87. package/dist/cli/output/json.d.ts.map +1 -0
  88. package/dist/cli/output/json.js +46 -0
  89. package/dist/cli/output/json.js.map +1 -0
  90. package/dist/cli/output/markdown.d.ts +17 -0
  91. package/dist/cli/output/markdown.d.ts.map +1 -0
  92. package/dist/cli/output/markdown.js +323 -0
  93. package/dist/cli/output/markdown.js.map +1 -0
  94. package/dist/cli/output/stats.d.ts +35 -0
  95. package/dist/cli/output/stats.d.ts.map +1 -0
  96. package/dist/cli/output/stats.js +63 -0
  97. package/dist/cli/output/stats.js.map +1 -0
  98. package/dist/cli/output/terminal-markdown.d.ts +23 -0
  99. package/dist/cli/output/terminal-markdown.d.ts.map +1 -0
  100. package/dist/cli/output/terminal-markdown.js +159 -0
  101. package/dist/cli/output/terminal-markdown.js.map +1 -0
  102. package/dist/config/index.d.ts +27 -0
  103. package/dist/config/index.d.ts.map +1 -0
  104. package/dist/config/index.js +266 -0
  105. package/dist/config/index.js.map +1 -0
  106. package/dist/config/schema.d.ts +179 -0
  107. package/dist/config/schema.d.ts.map +1 -0
  108. package/dist/config/schema.js +85 -0
  109. package/dist/config/schema.js.map +1 -0
  110. package/dist/gitignore/index.d.ts +5 -0
  111. package/dist/gitignore/index.d.ts.map +1 -0
  112. package/dist/gitignore/index.js +5 -0
  113. package/dist/gitignore/index.js.map +1 -0
  114. package/dist/gitignore/parser.d.ts +32 -0
  115. package/dist/gitignore/parser.d.ts.map +1 -0
  116. package/dist/gitignore/parser.js +110 -0
  117. package/dist/gitignore/parser.js.map +1 -0
  118. package/dist/gitignore/parser.test.d.ts +2 -0
  119. package/dist/gitignore/parser.test.d.ts.map +1 -0
  120. package/dist/gitignore/parser.test.js +217 -0
  121. package/dist/gitignore/parser.test.js.map +1 -0
  122. package/dist/i18n/index.d.ts +19 -0
  123. package/dist/i18n/index.d.ts.map +1 -0
  124. package/dist/i18n/index.js +43 -0
  125. package/dist/i18n/index.js.map +1 -0
  126. package/dist/i18n/locales/en.json +320 -0
  127. package/dist/i18n/locales/ru.json +320 -0
  128. package/dist/i18n/locales/zh.json +320 -0
  129. package/dist/index.d.ts +5 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +10 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/mcp/server.d.ts +9 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +156 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/metrics/complexity/cognitive.d.ts +25 -0
  138. package/dist/metrics/complexity/cognitive.d.ts.map +1 -0
  139. package/dist/metrics/complexity/cognitive.js +109 -0
  140. package/dist/metrics/complexity/cognitive.js.map +1 -0
  141. package/dist/metrics/complexity/cyclomatic.d.ts +21 -0
  142. package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -0
  143. package/dist/metrics/complexity/cyclomatic.js +111 -0
  144. package/dist/metrics/complexity/cyclomatic.js.map +1 -0
  145. package/dist/metrics/complexity/nesting-depth.d.ts +19 -0
  146. package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -0
  147. package/dist/metrics/complexity/nesting-depth.js +97 -0
  148. package/dist/metrics/complexity/nesting-depth.js.map +1 -0
  149. package/dist/metrics/documentation/comment-ratio.d.ts +21 -0
  150. package/dist/metrics/documentation/comment-ratio.d.ts.map +1 -0
  151. package/dist/metrics/documentation/comment-ratio.js +91 -0
  152. package/dist/metrics/documentation/comment-ratio.js.map +1 -0
  153. package/dist/metrics/duplication/code-duplication.d.ts +24 -0
  154. package/dist/metrics/duplication/code-duplication.d.ts.map +1 -0
  155. package/dist/metrics/duplication/code-duplication.js +167 -0
  156. package/dist/metrics/duplication/code-duplication.js.map +1 -0
  157. package/dist/metrics/duplication/code-duplication.test.d.ts +2 -0
  158. package/dist/metrics/duplication/code-duplication.test.d.ts.map +1 -0
  159. package/dist/metrics/duplication/code-duplication.test.js +612 -0
  160. package/dist/metrics/duplication/code-duplication.test.js.map +1 -0
  161. package/dist/metrics/error/error-handling.d.ts +23 -0
  162. package/dist/metrics/error/error-handling.d.ts.map +1 -0
  163. package/dist/metrics/error/error-handling.js +164 -0
  164. package/dist/metrics/error/error-handling.js.map +1 -0
  165. package/dist/metrics/error/error-handling.test.d.ts +2 -0
  166. package/dist/metrics/error/error-handling.test.d.ts.map +1 -0
  167. package/dist/metrics/error/error-handling.test.js +349 -0
  168. package/dist/metrics/error/error-handling.test.js.map +1 -0
  169. package/dist/metrics/index.d.ts +21 -0
  170. package/dist/metrics/index.d.ts.map +1 -0
  171. package/dist/metrics/index.js +50 -0
  172. package/dist/metrics/index.js.map +1 -0
  173. package/dist/metrics/naming/convention.d.ts +22 -0
  174. package/dist/metrics/naming/convention.d.ts.map +1 -0
  175. package/dist/metrics/naming/convention.js +117 -0
  176. package/dist/metrics/naming/convention.js.map +1 -0
  177. package/dist/metrics/size/file-length.d.ts +19 -0
  178. package/dist/metrics/size/file-length.d.ts.map +1 -0
  179. package/dist/metrics/size/file-length.js +68 -0
  180. package/dist/metrics/size/file-length.js.map +1 -0
  181. package/dist/metrics/size/function-length.d.ts +20 -0
  182. package/dist/metrics/size/function-length.d.ts.map +1 -0
  183. package/dist/metrics/size/function-length.js +101 -0
  184. package/dist/metrics/size/function-length.js.map +1 -0
  185. package/dist/metrics/size/parameter-count.d.ts +19 -0
  186. package/dist/metrics/size/parameter-count.d.ts.map +1 -0
  187. package/dist/metrics/size/parameter-count.js +97 -0
  188. package/dist/metrics/size/parameter-count.js.map +1 -0
  189. package/dist/metrics/structure/structure-analysis.d.ts +24 -0
  190. package/dist/metrics/structure/structure-analysis.d.ts.map +1 -0
  191. package/dist/metrics/structure/structure-analysis.js +223 -0
  192. package/dist/metrics/structure/structure-analysis.js.map +1 -0
  193. package/dist/metrics/structure/structure-analysis.test.d.ts +2 -0
  194. package/dist/metrics/structure/structure-analysis.test.d.ts.map +1 -0
  195. package/dist/metrics/structure/structure-analysis.test.js +342 -0
  196. package/dist/metrics/structure/structure-analysis.test.js.map +1 -0
  197. package/dist/metrics/types.d.ts +71 -0
  198. package/dist/metrics/types.d.ts.map +1 -0
  199. package/dist/metrics/types.js +5 -0
  200. package/dist/metrics/types.js.map +1 -0
  201. package/dist/parser/generic-parser.d.ts +28 -0
  202. package/dist/parser/generic-parser.d.ts.map +1 -0
  203. package/dist/parser/generic-parser.js +218 -0
  204. package/dist/parser/generic-parser.js.map +1 -0
  205. package/dist/parser/index.d.ts +19 -0
  206. package/dist/parser/index.d.ts.map +1 -0
  207. package/dist/parser/index.js +52 -0
  208. package/dist/parser/index.js.map +1 -0
  209. package/dist/parser/regex-parser.d.ts +46 -0
  210. package/dist/parser/regex-parser.d.ts.map +1 -0
  211. package/dist/parser/regex-parser.js +560 -0
  212. package/dist/parser/regex-parser.js.map +1 -0
  213. package/dist/parser/tree-sitter-parser.d.ts +50 -0
  214. package/dist/parser/tree-sitter-parser.d.ts.map +1 -0
  215. package/dist/parser/tree-sitter-parser.js +707 -0
  216. package/dist/parser/tree-sitter-parser.js.map +1 -0
  217. package/dist/parser/types.d.ts +52 -0
  218. package/dist/parser/types.d.ts.map +1 -0
  219. package/dist/parser/types.js +49 -0
  220. package/dist/parser/types.js.map +1 -0
  221. package/dist/scoring/index.d.ts +14 -0
  222. package/dist/scoring/index.d.ts.map +1 -0
  223. package/dist/scoring/index.js +80 -0
  224. package/dist/scoring/index.js.map +1 -0
  225. package/dist/utils/fs.d.ts +24 -0
  226. package/dist/utils/fs.d.ts.map +1 -0
  227. package/dist/utils/fs.js +61 -0
  228. package/dist/utils/fs.js.map +1 -0
  229. package/dist/utils/logger.d.ts +13 -0
  230. package/dist/utils/logger.d.ts.map +1 -0
  231. package/dist/utils/logger.js +43 -0
  232. package/dist/utils/logger.js.map +1 -0
  233. package/dist/utils/markdown.d.ts +16 -0
  234. package/dist/utils/markdown.d.ts.map +1 -0
  235. package/dist/utils/markdown.js +303 -0
  236. package/dist/utils/markdown.js.map +1 -0
  237. package/dist/utils/progress.d.ts +24 -0
  238. package/dist/utils/progress.d.ts.map +1 -0
  239. package/dist/utils/progress.js +79 -0
  240. package/dist/utils/progress.js.map +1 -0
  241. package/dist/utils/terminal.d.ts +62 -0
  242. package/dist/utils/terminal.d.ts.map +1 -0
  243. package/dist/utils/terminal.js +207 -0
  244. package/dist/utils/terminal.js.map +1 -0
  245. package/package.json +77 -0
@@ -0,0 +1,320 @@
1
+ {
2
+ "analyzing": "Вынюхиваем качество кода...",
3
+ "analysisComplete": "Вынюхивание завершено",
4
+ "analysisFailed": "Вынюхивание не удалось",
5
+ "aiReviewing": "ИИ проверяет код...",
6
+ "aiReviewComplete": "Проверка ИИ завершена",
7
+ "aiReviewFailed": "Проверка ИИ не удалась",
8
+ "reviewingFile": "Проверка {file}...",
9
+ "noAIProvider": "Провайдер ИИ не настроен",
10
+ "aiProviderHint": "Установите переменную окружения OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY или OLLAMA_HOST",
11
+ "outputWritten": "Результат записан в {file}",
12
+ "filesAnalyzed": "Проанализировано {count} файлов",
13
+ "skippedFiles": "Пропущено {count} файлов",
14
+ "analysisTime": "Анализ завершен за {time}мс",
15
+ "noFilesFound": "Файлы для анализа не найдены",
16
+ "report_title": "Отчет об анализе качества кода",
17
+ "report_overall_score": "Общая оценка: {score} / 100",
18
+ "report_level": "Уровень качества: {level}",
19
+ "report_metrics_details": "Детали метрик",
20
+ "report_worst_files": "Рейтинг проблемных файлов",
21
+ "report_conclusion": "Диагноз",
22
+ "report_file_score": "Индекс вони: {score}",
23
+ "report_more_issues": "...и ещё {count} проблем слишком вонючих, чтобы перечислять",
24
+ "report_score_calc": "Расчет оценки",
25
+ "report_no_issues": "Поздравляем! Проблемных файлов не найдено!",
26
+ "overallScore": "Индекс вони",
27
+ "worstFiles": "Рейтинг проблемных файлов",
28
+ "metricsSummary": "Сводка метрик",
29
+ "file": "Файл",
30
+ "score": "Оценка",
31
+ "issues": "Проблемы",
32
+ "complexity": "Сложность",
33
+ "size": "Размер",
34
+ "duplication": "Дублирование",
35
+ "documentation": "Документация",
36
+ "naming": "Именование",
37
+ "structure": "Структура",
38
+ "error": "Обработка ошибок",
39
+ "level_clean": "Свежий как весенний ветерок",
40
+ "level_clean_desc": "Код такой чистый, что читать его — одно удовольствие, как спа для глаз",
41
+ "level_mild": "Лёгкий душок",
42
+ "level_mild_desc": "В целом нормально, но немного попахивает. Проветрите и выживете",
43
+ "level_moderate": "Слегка вонючая молодость",
44
+ "level_moderate_desc": "Слабый запашок, откройте окно и надейтесь на лучшее",
45
+ "level_bad": "Код воняет, надевайте маску",
46
+ "level_bad_desc": "Код начинает вонять, подходите с осторожностью и маской",
47
+ "level_terrible": "Средний унаследованный бардак",
48
+ "level_terrible_desc": "Явный запах кода, даже свежий воздух не спасёт",
49
+ "level_disaster": "Скрытая токсичная опухоль",
50
+ "level_disaster_desc": "Весело писать, но плакать будете, когда придётся чинить",
51
+ "level_severe": "Тяжёлый унаследованный бардак",
52
+ "level_severe_desc": "Токсичные испарения повсюду, рекомендуется противогаз",
53
+ "level_very_bad": "Кладбище кода",
54
+ "level_very_bad_desc": "Ни один программист не входит и не выходит живым — оставьте надежду",
55
+ "level_extreme": "Зона ядерной катастрофы",
56
+ "level_extreme_desc": "Преступление против человечества, лучше сжечь",
57
+ "level_worst": "Поколенческий унаследованный бардак",
58
+ "level_worst_desc": "Унаследованный бардак, созданный поколениями, невозможно поддерживать",
59
+ "level_ultimate": "Абсолютный Король Бардака",
60
+ "level_ultimate_desc": "Настолько дикий, что родная мать отречётся от вас за это",
61
+ "score_comment_0": "Как весенний ветерок, код поцелованный ангелами — исцеляет душу",
62
+ "score_comment_10": "Свежий и приятный, как утренняя роса — почти хочется рефакторить ради удовольствия",
63
+ "score_comment_20": "Намёк на аромат, иногда запашок — всё ещё безопасно трогать",
64
+ "score_comment_30": "Немного воняет, но не смертельно — просто зажмите нос и продолжайте",
65
+ "score_comment_40": "Вонь бьёт в нос, рекомендуется маска — читайте на свой страх и риск",
66
+ "score_comment_50": "Токсичные испарения повсюду, код-ревью — это пытка — берите закуски и салфетки",
67
+ "score_comment_60": "Вонь заполняет воздух, мейнтейнеры кашляют кровью — молитесь о пощаде",
68
+ "score_comment_70": "Зона биологической опасности, напишите завещание перед тем как брать — удачи вам",
69
+ "score_comment_80": "Площадка ядерных отходов, берите костюм химзащиты — каждое редактирование — это азартная игра",
70
+ "score_comment_90": "Опухоль уровня катастрофы, каждый взгляд сокращает жизнь на десять лет — бегите пока можете",
71
+ "metric_cyclomatic_complexity": "Цикломатическая сложность",
72
+ "metric_cognitive_complexity": "Когнитивная сложность",
73
+ "metric_nesting_depth": "Глубина вложенности",
74
+ "metric_function_length": "Длина функции",
75
+ "metric_file_length": "Длина файла",
76
+ "metric_parameter_count": "Количество параметров",
77
+ "metric_comment_ratio": "Доля комментариев",
78
+ "metric_naming_convention": "Соглашение об именовании",
79
+ "metric_error_handling": "Обработка ошибок",
80
+ "metric_code_duplication": "Дублирование кода",
81
+ "metric_structure_analysis": "Анализ структуры",
82
+ "metric_complexity_good": "Чёткая структура, никакой лишней сложности, отлично!",
83
+ "metric_complexity_medium": "Извилистая логика, как лабиринт для мозга",
84
+ "metric_complexity_bad": "Функции как лабиринты, поддержка как рейд в подземелье",
85
+ "metric_length_good": "Коротко и ясно, легко понять",
86
+ "metric_length_medium": "Становится длинным, подумайте о разделении",
87
+ "metric_length_bad": "Длинный и вонючий, глаза кровоточат после чтения",
88
+ "metric_comment_good": "Хорошие комментарии, они помогут выжить",
89
+ "metric_comment_medium": "Редкие комментарии, читателям нужно воображение",
90
+ "metric_comment_bad": "Нет комментариев, понимание зависит от удачи",
91
+ "metric_naming_good": "Чёткое именование, свет цивилизации программистов",
92
+ "metric_naming_medium": "Именование нормальное, нужны догадки",
93
+ "metric_naming_bad": "Имена переменных как удары по клавиатуре: x, y, z, tmp, xxx",
94
+ "metric_structure_good": "Красивая структура, легко следовать",
95
+ "metric_structure_medium": "Структура нормальная, но немного запутанная",
96
+ "metric_structure_bad": "Вложенность как матрёшки, голова кружится от чтения",
97
+ "issue_category_complexity": "Проблемы сложности",
98
+ "issue_category_comment": "Проблемы комментариев",
99
+ "issue_category_naming": "Проблемы именования",
100
+ "issue_category_structure": "Проблемы структуры",
101
+ "issue_category_duplication": "Проблемы дублирования",
102
+ "issue_category_error": "Проблемы обработки ошибок",
103
+ "issue_category_other": "Другие проблемы",
104
+ "advice_good": "Продолжайте, вы чистюля мира кодинга, настоящий чемпион гигиены кода",
105
+ "advice_moderate": "Этот код как бунтующий подросток, нужна жёсткая любовь чтобы стать полезным",
106
+ "advice_bad": "Удалите репо и бегите, или запечатайте для следующего поколения страдать",
107
+ "severity_info": "Информация",
108
+ "severity_warning": "Предупреждение",
109
+ "severity_error": "Ошибка",
110
+ "severity_critical": "Критично",
111
+ "detail_no_functions": "Функции не найдены",
112
+ "detail_structure_issues": "{count} проблем структуры",
113
+ "detail_duplication": "{percent}% дублирования ({duplicates}/{total})",
114
+ "detail_errors_ignored": "{ignored}/{total} ошибок проигнорировано ({percent}%)",
115
+ "detail_no_error_prone_calls": "Вызовов с риском ошибок не обнаружено",
116
+ "detail_file_length": "{code} строк кода ({total} всего)",
117
+ "issue_high_nesting": "Глубокая вложенность: {depth}",
118
+ "issue_medium_nesting": "Средняя вложенность: {depth}",
119
+ "issue_file_too_large": "Файл слишком большой: {lines} строк",
120
+ "issue_too_many_functions": "Слишком много функций: {count}",
121
+ "issue_too_many_imports": "Слишком много импортов: {count}",
122
+ "issue_circular_deps": "Циклические зависимости: {count}",
123
+ "issue_duplicate_pattern": "Дублирующий паттерн: {names}",
124
+ "issue_ignored_error": "Игнорируется возвращаемое значение ошибки",
125
+ "issue_unhandled_error": "Необработанный вызов с риском ошибки",
126
+ "detail_no_code_lines": "Нет строк кода",
127
+ "detail_avg_max": "Среднее: {avg}, Макс: {max}",
128
+ "detail_avg_lines_max_lines": "Среднее: {avg} строк, Макс: {max} строк",
129
+ "detail_ratio": "{ratio}% ({comments}/{code})",
130
+ "detail_violations": "Найдено {count} нарушений",
131
+ "detail_no_violations": "Нарушений именования нет",
132
+ "threshold_excellent": "Отлично (≤{value})",
133
+ "threshold_good": "Хорошо ({min}-{max})",
134
+ "threshold_acceptable": "Приемлемо ({min}-{max})",
135
+ "threshold_poor": "Плохо (>{value})",
136
+ "verbose_basic_statistics": "Базовая статистика",
137
+ "verbose_total_files": "Всего файлов",
138
+ "verbose_total_lines": "Всего строк",
139
+ "verbose_total_issues": "Всего проблем",
140
+ "verbose_file_good_quality": "Качество кода приличное, ничего трагичного — так держать!",
141
+ "verbose_file_stats": "Строки: {total} всего, {code} кода, {comment} комментариев | Функции: {functions} | Классы: {classes}",
142
+ "verbose_function_details": "Детали функций",
143
+ "verbose_all_issues": "Все проблемы ({count})",
144
+ "verbose_col_function": "Функция",
145
+ "verbose_col_range": "Строки",
146
+ "verbose_col_line_count": "Кол-во",
147
+ "verbose_col_complexity": "Сложность",
148
+ "verbose_col_nesting": "Вложенность",
149
+ "verbose_col_params": "Параметры",
150
+ "verbose_col_docstring": "Комм",
151
+ "verbose_metric_details": "Детали",
152
+ "ai_review_title": "AI Обзор кода",
153
+ "ai_api_key_required": "Требуется API ключ. Используйте --api-key или установите переменную окружения.",
154
+ "ai_model_required": "Требуется модель. Используйте --model для указания модели.",
155
+ "ai_example_usage": "Пример использования:",
156
+ "ai_or_set_env": "Или установите переменные окружения:",
157
+ "ai_no_provider": "Нет доступного AI провайдера",
158
+ "ai_score_excellent": "Отлично",
159
+ "ai_score_good": "Хорошо",
160
+ "ai_score_acceptable": "Приемлемо",
161
+ "ai_score_poor": "Плохо",
162
+ "ai_score_critical": "Критично",
163
+ "ai_file_analysis_report": "Отчёт анализа файла",
164
+ "ai_code_statistics": "Статистика кода",
165
+ "ai_metrics_analysis": "Анализ метрик",
166
+ "ai_detected_issues": "Обнаруженные проблемы",
167
+ "ai_function_analysis": "Анализ функций (по сложности)",
168
+ "ai_no_issues_detected": "Значительных проблем не обнаружено",
169
+ "ai_no_functions_detected": "Функции не обнаружены",
170
+ "ai_total_lines": "Всего строк",
171
+ "ai_code_lines": "Строк кода",
172
+ "ai_comment_lines": "Строк комментариев",
173
+ "ai_blank_lines": "Пустых строк",
174
+ "ai_comment_ratio": "Доля комментариев",
175
+ "ai_functions": "Функций",
176
+ "ai_classes": "Классов",
177
+ "ai_high_complexity": "высокая сложность",
178
+ "ai_long_function": "длинная функция",
179
+ "ai_deep_nesting": "глубокая вложенность",
180
+ "ai_many_parameters": "много параметров",
181
+ "ai_review_request": "На основе результатов локального анализа, пожалуйста, предоставьте:",
182
+ "ai_review_request_1": "Резюме наиболее критичных проблем качества кода",
183
+ "ai_review_request_2": "Конкретные предложения по рефакторингу с приоритетами",
184
+ "ai_review_request_3": "Проблемы безопасности, если есть",
185
+ "ai_review_request_4": "Рекомендации по улучшению поддерживаемости",
186
+ "ai_review_focus": "Сосредоточьтесь на проблемах с наивысшей серьёзностью и функциях с наивысшей сложностью.",
187
+ "ai_prompt_role": "Вы опытный инженер по ревью кода. Проанализируйте предоставленные метрики статического анализа и исходный код, затем создайте точный, практический отчёт по ревью кода.",
188
+ "ai_prompt_output_rules": "Выводите ревью в хорошо структурированном Markdown. Используйте заголовки, списки, блоки кода и инлайн-код по необходимости. Каждое предложение должно быть конкретным и исполняемым — никаких расплывчатых советов и любезностей.",
189
+ "ai_prompt_metrics_title": "Определение метрик",
190
+ "ai_prompt_metrics_complexity": "complexity (Цикломатическая сложность): Измеряет пути ветвления кода. CC = 1 + точки решений (if/loop/case/catch/&&/||/ternary).",
191
+ "ai_prompt_metrics_nesting": "nesting (Глубина вложенности): Уровень вложенности блоков кода, влияет на читаемость и когнитивную нагрузку.",
192
+ "ai_prompt_metrics_params": "params (Количество параметров): Число параметров функции, слишком много снижает тестируемость.",
193
+ "ai_prompt_metrics_lines": "lines (Длина функции): Строки кода в функции, чрезмерная длина указывает на слишком много обязанностей.",
194
+ "ai_prompt_metrics_duplication": "duplication (Дублирование кода): Доля дублирующихся паттернов, >3% требует рефакторинга.",
195
+ "ai_prompt_metrics_structure": "structure (Анализ структуры): Организация файлов, глубина вложенности, сложность модулей.",
196
+ "ai_prompt_metrics_error": "error (Обработка ошибок): Паттерны обработки ошибок, неперехваченные исключения и игнорируемые ошибки.",
197
+ "ai_prompt_metrics_note": "Метрики основаны на отраслевых стандартах (SonarQube, ESLint, Clean Code). Пороги зависят от сложности проекта.",
198
+ "ai_prompt_constraints_title": "Ограничения",
199
+ "ai_prompt_constraint_no_repeat": "НЕ повторяйте сырые данные метрик. Анализируйте первопричины напрямую.",
200
+ "ai_prompt_constraint_location": "Каждая проблема должна указывать: имя функции + диапазон строк.",
201
+ "ai_prompt_constraint_executable": "Предложения по рефакторингу должны быть немедленно исполняемыми. Пример: \"Извлечь строки 45-67 в функцию calculateMetrics(data), возвращающую MetricResult[]\".",
202
+ "ai_prompt_constraint_priority": "Приоритет: Узкие места производительности > Уязвимости безопасности > Риски поддерживаемости > Стиль кода.",
203
+ "ai_prompt_constraint_lang_aware": "Проводите ревью в соответствии с идиомами и лучшими практиками целевого языка программирования.",
204
+ "ai_prompt_output_title": "Формат вывода",
205
+ "ai_prompt_output_instruction": "Строго используйте следующую структуру заголовков Markdown. Каждый раздел обязателен. Общий ответ до 500 слов.",
206
+ "ai_prompt_output_assessment": "Одно предложение, определяющее первопричину наиболее критичной проблемы. Объясните почему это важно, не повторяйте числа метрик.",
207
+ "ai_prompt_output_critical_item": "Для каждой проблемы используйте формат:\n- **`ИмяФункции` (L начало-конец)**: Описание первопричины + конкретное предложение по исправлению",
208
+ "ai_prompt_output_refactor_item": "Нумерованный список действий. Каждый шаг ≤30 слов, напрямую исполняемый.",
209
+ "ai_prompt_output_security_item": "Перечислите проблемы безопасности с расположением кода + исправление, или укажите \"Проблем безопасности не обнаружено\".",
210
+ "ai_prompt_quality_title": "Правила качества",
211
+ "ai_prompt_quality_specific": "Запрет расплывчатых предложений. Плохо: \"Оптимизировать структуру кода\". Хорошо: \"Разделить Parser на классы Lexer и Evaluator\".",
212
+ "ai_prompt_quality_evidence": "Все выводы должны основываться на предоставленных данных метрик.",
213
+ "ai_prompt_quality_concise": "Без любезностей, повторений и описаний с нулевой информацией.",
214
+ "ai_prompt_quality_syntax": "Примеры кода должны использовать фактический синтаксис целевого языка.",
215
+ "ai_prompt_system": "Вы остроумный ревьюер кода с игривым характером. Проанализируйте предоставленные метрики качества кода и дайте практические рекомендации с долей юмора.",
216
+ "ai_prompt_instruction_1": "Быть кратким и конкретным, но развлекательным",
217
+ "ai_prompt_instruction_2": "Фокусироваться на самых важных проблемах (самых \"вонючих\" частях)",
218
+ "ai_prompt_instruction_3": "Предоставлять конкретные предложения по рефакторингу",
219
+ "ai_prompt_instruction_4": "Выявлять потенциальные проблемы безопасности",
220
+ "ai_prompt_instruction_5": "Предлагать улучшения для поддерживаемости",
221
+ "ai_prompt_summary": "Резюме",
222
+ "ai_prompt_key_issues": "Ключевые проблемы (Вонючие части)",
223
+ "ai_prompt_refactoring": "Предложения по рефакторингу",
224
+ "ai_prompt_security": "Проблемы безопасности",
225
+ "ai_prompt_security_clear": "Всё чисто! Никаких скелетов в шкафу.",
226
+ "ai_prompt_word_limit": "Ответ до 500 слов. Будьте полезны, но веселитесь!",
227
+ "warn_analyze_failed": "Не удалось проанализировать {file}: {error}",
228
+ "warn_config_validation_failed": "Ошибка валидации конфигурации: {error}",
229
+ "warn_config_load_failed": "Не удалось загрузить конфигурацию: {error}",
230
+ "warn_no_model_specified": "{provider}_API_KEY установлен, но модель не указана. Используйте --model или установите {provider}_MODEL",
231
+ "error_fatal": "Фатальная ошибка: {error}",
232
+ "progress_discovering": "Поиск файлов...",
233
+ "progress_discovered": "Найдено {count} файлов для анализа",
234
+ "progress_analyzing": "Анализ",
235
+ "warn_file_too_large": "Пропуск большого файла ({size}КБ): {file}",
236
+ "warn_file_read_error": "Не удалось прочитать файл: {file}",
237
+ "warn_parse_error": "Не удалось разобрать файл: {file}",
238
+ "warn_unsupported_language": "Неподдерживаемый язык: {file}",
239
+ "warn_no_files_match": "Нет файлов, соответствующих шаблонам включения",
240
+ "warn_all_files_excluded": "Все файлы исключены .gitignore или шаблонами исключения",
241
+ "info_skipped_binary": "Пропущен бинарный файл: {file}",
242
+ "info_analysis_summary": "Проанализировано {analyzed} файлов, пропущено {skipped} файлов",
243
+ "error_path_not_found": "Путь не найден: {path}",
244
+ "error_not_a_directory": "Не является директорией: {path}",
245
+ "config_current": "Текущая конфигурация:",
246
+ "config_created": "Файл конфигурации создан: {path}",
247
+ "config_already_exists": "Файл конфигурации уже существует: {path}",
248
+ "config_unknown_action": "Неизвестное действие: {action}. Используйте 'show' или 'init'.",
249
+ "config_init_success": "Конфигурация успешно инициализирована",
250
+ "html_skipped": "Пропущено",
251
+ "html_time": "Время",
252
+ "html_status": "Статус",
253
+ "html_lang": "ru",
254
+ "output_table_of_contents": "Содержание",
255
+ "output_statistics": "Статистика",
256
+ "output_metric": "Метрика",
257
+ "output_value": "Значение",
258
+ "output_skipped": "Пропущено",
259
+ "output_time": "Время",
260
+ "output_status": "Статус",
261
+ "output_issues": "Проблемы",
262
+ "output_generated_by": "Создано с помощью {tool}",
263
+ "cli_description": "Анализатор качества кода с AST-парсингом и интеграцией ИИ",
264
+ "cli_examples": "Примеры:",
265
+ "cli_example_analyze_cwd": "Анализ текущей директории",
266
+ "cli_example_analyze_top": "Показать 10 худших файлов",
267
+ "cli_example_analyze_markdown": "Вывод в формате Markdown",
268
+ "cli_example_analyze_locale": "Использовать китайский язык",
269
+ "cli_example_ai_review": "Обзор кода с помощью ИИ",
270
+ "cli_example_mcp_install": "Настроить MCP Server для AI-инструментов",
271
+ "cli_supported_languages": "Поддерживаемые языки:",
272
+ "cmd_analyze_description": "Анализ качества кода проекта",
273
+ "cmd_analyze_example_cwd": "Анализ текущей директории",
274
+ "cmd_analyze_example_dir": "Анализ указанной директории",
275
+ "cmd_analyze_example_top": "Показать 5 худших файлов",
276
+ "cmd_analyze_example_markdown": "Сохранить отчёт в Markdown",
277
+ "cmd_analyze_example_html": "Сохранить отчёт в HTML",
278
+ "cmd_analyze_example_exclude": "Исключить тестовые файлы",
279
+ "cmd_analyze_example_locale": "Использовать китайский вывод",
280
+ "cmd_ai_review_description": "Обзор кода с помощью ИИ",
281
+ "cmd_ai_review_env_header": "Переменные окружения:",
282
+ "cmd_config_description": "Просмотр или инициализация конфигурации",
283
+ "cmd_config_example_show": "Показать текущую конфигурацию",
284
+ "cmd_config_example_init": "Создать .fuckucoderc.json",
285
+ "cmd_config_example_show_project": "Показать конфигурацию для проекта",
286
+ "cmd_config_example_set_locale": "Установить язык по умолчанию — китайский",
287
+ "cmd_config_example_set_api_key": "Установить OpenAI-совместимый API-ключ",
288
+ "cmd_config_example_set_base_url": "Установить пользовательский API-эндпоинт",
289
+ "cmd_config_example_set_model": "Установить модель по умолчанию",
290
+ "cmd_config_example_set_provider": "Установить AI-провайдера",
291
+ "config_set_success": "Конфигурация обновлена: {key} = {value}",
292
+ "config_set_invalid_key": "Недопустимый ключ конфигурации: {key}",
293
+ "config_set_value_required": "'config set' требует значение",
294
+ "config_set_key_required": "'config set' требует ключ",
295
+ "ai_review_output_title": "Отчёт AI-обзора кода",
296
+ "cmd_ai_review_format_help": "Формат вывода: console, markdown, html (по умолчанию: console)",
297
+ "output_html_requires_file": "Формат HTML требует -o <file> для записи. Переключение на консольный формат.",
298
+ "verbose_project_overview": "Обзор проекта",
299
+ "verbose_total_code_lines": "Всего строк кода",
300
+ "verbose_total_comment_lines": "Всего строк комментариев",
301
+ "verbose_overall_comment_ratio": "Общая доля комментариев",
302
+ "verbose_language_distribution": "Распределение языков",
303
+ "verbose_language": "Язык",
304
+ "verbose_file_count": "Файлов",
305
+ "verbose_avg_file_size": "Средний размер файла",
306
+ "verbose_largest_file": "Самый большой файл",
307
+ "verbose_lines": "{count} строк",
308
+ "verbose_per_file_metrics": "Метрики по файлам",
309
+ "verbose_top_worst_functions": "Топ-10 худших функций",
310
+ "verbose_col_file": "Файл",
311
+ "cmd_mcp_install_description": "Установить конфигурацию MCP Server для AI-инструментов",
312
+ "mcp_install_target_prompt": "Выберите целевой AI-инструмент:",
313
+ "mcp_installed": "MCP Server настроен для {target}",
314
+ "mcp_config_written": "Конфигурация записана в {path}",
315
+ "mcp_config_exists": "MCP Server уже настроен в {path}",
316
+ "mcp_config_updated": "Конфигурация MCP Server обновлена в {path}",
317
+ "mcp_unknown_target": "Неизвестная цель: {target}. Поддерживаются: claude, cursor",
318
+ "mcp_install_example_claude": "Настроить для Claude Code",
319
+ "mcp_install_example_cursor": "Настроить для Cursor"
320
+ }