services.code_service module

Code Service Module

שירות עיבוד וניתוח קוד עבור Code Keeper Bot.

מודול זה מספק wrapper לפונקציונליות עיבוד קוד, כולל: - זיהוי שפות תכנות - הדגשת תחביר - ניתוח קוד - חיפוש בקוד

services.code_service.detect_language(code, filename)[מקור]

מקור אמת לזיהוי שפה: דטקטור דומייני. נשמרים fallback-ים ישנים לתאימות, אך החלטה סופית מגיעה מהדומיין כאשר אפשר.

Return type:

str

פרמטרים:
services.code_service.validate_code_input(code, file_name, user_id)[מקור]

בודק ומנקה קלט קוד.

פרמטרים:
  • code (str) – קוד המקור לבדיקה

  • file_name (str) – שם הקובץ

  • user_id (int) – מזהה המשתמש

Returns:

(is_valid, cleaned_code, error_message)
  • is_valid: האם הקוד תקין

  • cleaned_code: הקוד המנוקה

  • error_message: הודעת שגיאה (אם יש)

Return type:

Tuple[bool, str, str]

services.code_service.clean_pasted_code(code, file_name)[מקור]

הניקוי המינימלי לקוד שמודבק בבוט — הדלת של ה-handlers אליו.

ה-handlers אינם מייבאים את שכבת הדומיין (tests/unit/architecture/test_layer_boundaries.py), ולכן הם עוברים כאן. מה מנוקה ומה לא — ב-docstring של src.domain.services.code_normalizer.clean_pasted_code(); כאן רק נקבע אם הקובץ הוא Markdown, לפי השם (is_markdown_filename()).

כל זרימה בבוט קוראת לזה פעם אחת, ממש לפני השמירה, כשגם הקוד וגם השם ידועים. None הוא טקסט ריק: context.user_data יכול לאבד את הקוד בין שלבי השיחה, והזרימות תמיד שמרו אז מחרוזת ריקה.

Return type:

PasteCleanup

פרמטרים:
  • code (str | None)

  • file_name (str | None)

services.code_service.format_cleanup_notice(cleanup)[מקור]

השורות שהבוט מוסיף להודעת ההצלחה: מה נוקה, ואזהרה על תווי כיווניות.

מחרוזת ריקה כשאין מה לומר. בלי השורה הזו הניקוי היה קורה בשקט, וזה בדיוק מה שהוחלף כאן. הטקסט אינו מכיל אף תו מבין _*`[]<>&: הוא נכנס להודעות עם parse_mode של Markdown וגם של HTML, ותו כזה היה משנה את העיצוב או מפיל את השליחה ב-BadRequest.

Return type:

str

פרמטרים:

cleanup (PasteCleanup)

services.code_service.format_bidi_warning(line_numbers)[מקור]

המשפט האחד על תווי embedding, override ו-isolate — לבוט ולוובאפ.

מחרוזת ריקה כשאין שורות. בלי אייקון ובלי סיומת: הבוט מוסיף ”⚠️“ ו“לא נגעתי בהם“ (format_cleanup_notice()), והוובאפ מציג אותו בבאנר משלו (bidi_warning_for_display()). כך הניסוח חי במקום אחד.

Return type:

str

פרמטרים:

line_numbers (Tuple[int, ...])

services.code_service.bidi_warning_for_display(code)[מקור]

האזהרה שמוצגת לצד קוד בוובאפ, או מחרוזת ריקה כשאין בו תווים כאלה.

התווים נשמרים כמו שנשלחו, ולכן עמוד שמציג קוד צריך להזהיר עליהם בעצמו. אילו עמודים כבר מזהירים ואילו עוד לא — ב-docs/quality/code-normalization.md, ו-tests/test_bidi_warning_pages_match_the_doc.py משווה את הרשימה לקוד. מספרי השורות הם של הטקסט שמקבלים כאן; עמוד שממספר אחרת (Pygments חותך שורות ריקות מההתחלה) מעביר את הטקסט שהוא מציג.

Return type:

str

פרמטרים:

code (object)

services.code_service.analyze_code(code, language)[מקור]

מבצע ניתוח על קטע קוד עבור שפה נתונה.

פרמטרים:
  • code (str) – קוד המקור לניתוח

  • language (str) – שפת התכנות

Returns:

מילון עם תוצאות הניתוח, כולל:
  • lines: מספר שורות

  • complexity: מורכבות הקוד

  • metrics: מטריקות נוספות

Return type:

Dict[str, Any]

services.code_service.extract_functions(code, language)[מקור]

Extract function definitions from code.

Return type:

List[Dict[str, Any]]

פרמטרים:
services.code_service.get_code_stats(code)[מקור]

Compute simple statistics for a code snippet.

Return type:

Dict[str, Any]

פרמטרים:

code (str)

services.code_service.highlight_code(code, language)[מקור]

Return syntax highlighted representation for code.

Return type:

str

פרמטרים: