You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Endpoint, принимающий код решения и возвращающий термины глоссария, задействованные в этом коде, — фундамент для мини-карточек «Функции в коде» (режимы 1/2 и песочница #314).
Scope
glossary/: публичная функция поверх _CodeScanner/detect_from_code (glossary/detector.py:194), возвращающая ВСЕ распознанные термины (а не только отсутствующие в базе): builtins из DEFAULT_NOTABLE_BUILTINS (detector.py:39-55 — расширить базовыми: print/input/len/int/str/float/list/dict/set/tuple/range/open/...), вызовы stdlib через импорты, конструкция match/case; каждый термин сопоставляется с карточкой базы (JsonGlossaryProvider.known_terms/get).
Расширение анализатора на методы (s.split(), lst.append()): эвристика по известным именам методов встроенных типов; допустимы false positives — помечать полем confidence.
Побочный эффект: нераспознанные-но-заметные термины попадают в очередь GlossaryMissingEntry — это включает practice-driven AST-канал пополнения, который сейчас в web не задействован (детектор вызывается только для ошибок, viewmodels.py:180).
Non-goals
НЕ исполнять код (только ast.parse); НЕ UI (отдельная подзадача).
Acceptance criteria
Код с sorted, functools.reduce, match/case, s.split() → соответствующие термины; пользовательские имена (свои функции/переменные) не попадают
SyntaxError во входном коде → пустой список + message_id, не 500
Часть эпика #315.
Задача
Endpoint, принимающий код решения и возвращающий термины глоссария, задействованные в этом коде, — фундамент для мини-карточек «Функции в коде» (режимы 1/2 и песочница #314).
Scope
glossary/: публичная функция поверх_CodeScanner/detect_from_code(glossary/detector.py:194), возвращающая ВСЕ распознанные термины (а не только отсутствующие в базе): builtins изDEFAULT_NOTABLE_BUILTINS(detector.py:39-55— расширить базовыми:print/input/len/int/str/float/list/dict/set/tuple/range/open/...), вызовы stdlib через импорты, конструкцияmatch/case; каждый термин сопоставляется с карточкой базы (JsonGlossaryProvider.known_terms/get).s.split(),lst.append()): эвристика по известным именам методов встроенных типов; допустимы false positives — помечать полемconfidence.web/server.py+web/viewmodels.py:POST /api/code-terms(тело{code}либо{path}; лимит тела как fix(web): лимиты на входные данные API — тело запроса и числовые параметры #259) →[{id, title, summary, kind, has_card, url}].GlossaryMissingEntry— это включает practice-driven AST-канал пополнения, который сейчас в web не задействован (детектор вызывается только для ошибок,viewmodels.py:180).Non-goals
ast.parse); НЕ UI (отдельная подзадача).Acceptance criteria
sorted,functools.reduce,match/case,s.split()→ соответствующие термины; пользовательские имена (свои функции/переменные) не попадаютmessage_id, не 500