AI Slop Code RIsk Monitor

dsphper/lanhu-mcp

⚡ 需求分析效率提升 200%!全球首个为 AI 编程时代设计的团队协作 MCP 服务器,自动分析需求自动编写前后端代码,下载切图

32.6 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for dsphper/lanhu-mcp, a Python project with 2,455 GitHub stars. SynthScan examined 21,059 lines of code across 65 source files, recording 385 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 32.6 (High pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

32.6
Adjusted Signal
32.6
Raw Pattern Score
100%
Time Factor
2026-09-24
Last Push
2.5K
Stars
Python
Language
21.1K
Lines of Code
65
Files
385
Pattern Hits
2026-10-12
Scan Date
1.15
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 39.4/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 219 finding(s).

Hallucinated Dependency & Supply Chain Risk 49.0/100 · MEDIUM

Are imports declared and package/API names verified? 67 finding(s).

Agent Over-Engineering Ratio 58.0/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 273 finding(s).

PR Review Velocity Impact 86.2/100 · CRITICAL

Which changes need focused human review? 385 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 75MEDIUM 37LOW 273

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 385 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Cross-Language Confusion54 hits · 271 pts
SeverityFileLineSnippetContext
HIGH⚡lanhu_mcp_server.py1792 let vm = null; let node = el;CODE
HIGH⚡lanhu_mcp_server.py1798 const dw = (layers[0]?.width || 750) / 2;CODE
HIGH⚡lanhu_mcp_server.py1799 const dh = (layers[0]?.height || 1334) / 2;CODE
HIGH⚡lanhu_mcp_server.py1803 for (let i = 1; i < layers.length && i < items.length; i++) {CODE
HIGH⚡lanhu_mcp_server.py1810 results.push({CODE
HIGH⚡lanhu_mcp_server.py1814 textInfo: L.textInfo || null,CODE
HIGH⚡lanhu_mcp_server.py1814 textInfo: L.textInfo || null,CODE
HIGH⚡lanhu_mcp_server.py4836 while (current && current.nodeType === 1) {CODE
HIGH⚡lanhu_mcp_server.py4839 style.visibility === 'collapse' || Number(style.opacity) === 0 || current.hidden) return false;CODE
HIGH⚡lanhu_mcp_server.py4847 if (rect.width < .5 || rect.height < .5) return;CODE
HIGH⚡lanhu_mcp_server.py4848 if (documentWidth > 4096 && documentHeight > 4096 &&CODE
HIGH⚡lanhu_mcp_server.py4850 rects.push({x, y, right: x + rect.width, bottom: y + rect.height});CODE
HIGH⚡lanhu_mcp_server.py4865 parseFloat(style.borderTopWidth) > 0 || parseFloat(style.borderRightWidth) > 0 ||CODE
HIGH⚡lanhu_mcp_server.py4866 parseFloat(style.borderBottomWidth) > 0 || parseFloat(style.borderLeftWidth) > 0;CODE
HIGH⚡lanhu_mcp_server.py4873 } : null;CODE
HIGH⚡lanhu_mcp_server.py5170 blocks.push({text, bounds, color: style.color || null, fontSize: style.fontSize || null,CODE
HIGH⚡lanhu_mcp_server.py5170 blocks.push({text, bounds, color: style.color || null, fontSize: style.fontSize || null,CODE
HIGH⚡lanhu_mcp_server.py5170 blocks.push({text, bounds, color: style.color || null, fontSize: style.fontSize || null,CODE
HIGH⚡lanhu_mcp_server.py5171 fontWeight: style.fontWeight || null, elementId: parent.id || null});CODE
HIGH⚡lanhu_mcp_server.py5171 fontWeight: style.fontWeight || null, elementId: parent.id || null});CODE
HIGH⚡lanhu_mcp_server.py5187 const data = window.__lanhuAxurePageData || null;CODE
HIGH⚡lanhu_mcp_server.py5187 const data = window.__lanhuAxurePageData || null;CODE
HIGH⚡lanhu_mcp_server.py5197 while (current && current.nodeType === 1) {CODE
HIGH⚡lanhu_mcp_server.py5201 current.hidden || current.getAttribute('aria-hidden') === 'true') return false;CODE
HIGH⚡lanhu_mcp_server.py5205 return rect.width >= 0.5 && rect.height >= 0.5;CODE
HIGH⚡lanhu_mcp_server.py5208 if (!node) return null;CODE
HIGH⚡lanhu_mcp_server.py5227 const ownerId = annotation.ownerId || null;CODE
HIGH⚡lanhu_mcp_server.py5227 const ownerId = annotation.ownerId || null;CODE
HIGH⚡lanhu_mcp_server.py5228 const scriptId = ownerId && objectPaths[ownerId]CODE
HIGH⚡lanhu_mcp_server.py5230 : null;CODE
HIGH⚡lanhu_mcp_server.py5231 const noteHtml = annotation['注释'] || annotation.note || annotation.description || '';CODE
HIGH⚡lanhu_mcp_server.py5234 fn: annotation.fn ?? null,CODE
HIGH⚡lanhu_mcp_server.py5239 scriptId: scriptId || nullCODE
HIGH⚡lanhu_mcp_server.py5262 located.push({CODE
HIGH⚡lanhu_mcp_server.py5263 fn: record?.fn ?? null,CODE
HIGH⚡lanhu_mcp_server.py5264 ownerId: record?.ownerId ?? null,CODE
HIGH⚡lanhu_mcp_server.py5340 if (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') {CODE
HIGH⚡lanhu_mcp_server.py5346 if (bgImg && bgImg !== 'none') {CODE
HIGH⚡lanhu_mcp_server.py5349 images.push({ src: m[1], type: 'bg', w: Math.round(rect.width), h: Math.round(rect.heighCODE
HIGH⚡lanhu_mcp_server.py5356 if (img.src && img.naturalWidth > 0 && !img.src.startsWith('data:')) {CODE
HIGH⚡lanhu_mcp_server.py5357 images.push({ src: img.src, type: 'img', w: img.naturalWidth, h: img.naturalHeight });CODE
HIGH⚡lanhu_mcp_server.py5389 while (current && current.nodeType === 1) {CODE
HIGH⚡lanhu_mcp_server.py5392 style.visibility === 'collapse' || Number(style.opacity) === 0 || current.hidden) reCODE
HIGH⚡lanhu_mcp_server.py5400 if (rect.width < .5 || rect.height < .5) return;CODE
HIGH⚡lanhu_mcp_server.py5401 if (documentWidth > 4096 && documentHeight > 4096 &&CODE
HIGH⚡lanhu_mcp_server.py5403 rects.push({x, y, right: x + rect.width, bottom: y + rect.height});CODE
HIGH⚡lanhu_mcp_server.py5418 parseFloat(style.borderTopWidth) > 0 || parseFloat(style.borderRightWidth) > 0 ||CODE
HIGH⚡lanhu_mcp_server.py5419 parseFloat(style.borderBottomWidth) > 0 || parseFloat(style.borderLeftWidth) > 0;CODE
HIGH⚡lanhu_mcp_server.py5426 } : null;CODE
HIGHlanhu_mcp_server.py5140 while (current && current.nodeType === 1) {CODE
HIGHlanhu_mcp_server.py5144 current.hidden || current.getAttribute('aria-hidden') === 'true') return false;CODE
HIGHlanhu_mcp_server.py5159 const rects = Array.from(range.getClientRects()).filter(r => r.width >= 0.5 && r.height >= 0.5);CODE
HIGHlanhu_mcp_server.py5325 if (rect.width < 1 || rect.height < 1) return;CODE
HIGHlanhu_mcp_server.py5329 n => n.nodeType === 3 && n.textContent.trim().length > 0CODE
Hyper-Verbose Identifiers171 hits · 172 pts
SeverityFileLineSnippetContext
LOW⚡lanhu_mcp_server.py4878async def capture_axure_focus_regions_internal(CODE
LOWlanhu_mcp_server.py468def _enable_embedded_lanhu_design() -> None:CODE
LOWlanhu_mcp_server.py963def _resolve_loop_placeholder(value: str, loop_item: dict) -> str:CODE
LOWlanhu_mcp_server.py1145 def _has_only_transparent_solid(fills: list) -> bool:CODE
LOWlanhu_mcp_server.py5560async def lanhu_resolve_invite_link(CODE
LOWlanhu_mcp_server.py5640def _get_analysis_mode_options_by_role(user_role: str) -> str:CODE
LOWlanhu_mcp_server.py7076async def lanhu_get_ai_analyze_design_result(CODE
LOWlanhu_mcp_server.py8246async def lanhu_get_design_overview(CODE
LOWlanhu_mcp_server.py8272async def lanhu_inspect_design_region(CODE
LOWlanhu_mcp_server.py8297async def lanhu_export_design_assets(CODE
LOW⚡lanhu_mcp_server.py1823def _extract_full_annotations_from_sketch(sketch_data: dict, design_scale: float = 2.0) -> str:STRING
LOW⚡lanhu_mcp_server.py4829async def _extract_axure_page_metrics(page) -> dict:STRING
LOWlanhu_mcp_server.py3168 async def _find_current_axure_doc_id(self, project_id: str, team_id: str,STRING
LOWlanhu_mcp_server.py4219 async def _get_version_id_by_image_id(self, project_id: str, team_id: str = None, image_id: str = None) -> str:STRING
LOWlanhu_mcp_server.py4330def _format_axure_annotations_for_text(axure_annotations: Optional[dict]) -> str:STRING
LOWlanhu_mcp_server.py4509def _select_axure_screenshot_clip(metrics: dict, margin: int = 32) -> Optional[dict]:STRING
LOWlanhu_mcp_server.py4610def _plan_axure_screenshot_tiles(metrics: dict, text_blocks: Optional[List[dict]] = None) -> List[dict]:STRING
LOWlanhu_mcp_server.py4730def _normalize_axure_anchor_text(value: str) -> str:STRING
LOWlanhu_mcp_server.py4744def _center_axure_focus_region(anchor: dict, document_size: dict, width: float, height: float) -> dict:STRING
LOWlanhu_mcp_server.py4788def _parse_axure_focus_levels(value: str) -> List[str]:STRING
LOWlanhu_mcp_server.py5714async def lanhu_list_product_documents(STRING
LOWlanhu_mcp_server.py6335def _get_analysis_mode_prompt(analysis_mode: str) -> dict:STRING
LOWlanhu_mcp_server.py6369async def lanhu_get_ai_analyze_page_result(STRING
LOWlanhu_mcp_server.py6715async def lanhu_inspect_requirement_region(STRING
LOWlanhu_mcp_server.py6890def _normalize_design_sectors(sectors: List[dict]) -> tuple[List[dict], dict[str, List[dict]]]:STRING
LOWlanhu_design/variants.py121def validate_downloaded_variant(selected: dict, decoded: dict) -> None:CODE
LOWlanhu_design/install.py273def _decode_resource_contents(contents: Any) -> bytes:CODE
LOWtests/test_design_service.py66async def test_exact_versions_and_snapshot_queries_never_switch_to_latest(tmp_path):CODE
LOWtests/test_design_service.py87async def test_region_crop_pagination_validation_and_unknown_ids(tmp_path):CODE
LOWtests/test_design_service.py110async def test_dds_failure_is_explicit_and_does_not_mix_newer_layout(tmp_path):CODE
LOWtests/test_design_service.py121async def test_mcp_image_and_bundle_can_be_installed_on_a_separate_client_path(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py157async def test_partial_exports_and_unknown_assets_are_not_false_success(tmp_path):CODE
LOWtests/test_design_service.py168def test_mixed_design_url_preserves_design_identity_and_requires_exact_version():CODE
LOWtests/test_design_service.py177async def test_credentials_do_not_follow_cdn_redirects(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py197async def test_a_different_credential_namespace_cannot_read_cached_resources(tmp_path):CODE
LOWtests/test_design_service.py207async def test_hidden_ancestor_and_numeric_dds_ids_are_respected(tmp_path):CODE
LOWtests/test_design_service.py226async def test_unverified_nonfigma_origin_allows_read_only_overview_but_blocks_export(tmp_path):CODE
LOWtests/test_design_service.py248async def test_figma_nonzero_origin_supports_overview_inspection_and_export(tmp_path):CODE
LOWtests/test_design_service.py271async def test_changed_normalizer_output_does_not_reuse_old_derived_snapshot(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py287async def test_mcp_visual_failures_are_json_objects_and_preserve_decoder_reason(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py309async def test_large_reference_uses_bounded_overview_and_native_region(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py346async def test_region_fetch_failure_returns_labeled_lower_resolution_evidence(tmp_path):CODE
LOWtests/test_design_service.py362async def test_svg_selection_is_public_and_has_separate_verifiable_bundle(tmp_path):CODE
LOWtests/test_design_service.py394def test_font_requirements_keep_mixed_numeric_and_named_weights():CODE
LOWtests/test_design_service.py405async def test_overview_font_inventory_is_not_limited_by_node_pagination(tmp_path, monkeypatch):CODE
LOWtests/test_design_service.py425async def test_refreshed_signed_url_updates_transport_without_changing_snapshot_identity(tmp_path):CODE
LOWtests/test_design_service.py444async def test_tiny_provider_image_is_not_reported_as_native_detail(tmp_path):CODE
LOWtests/test_design_service.py464async def test_raster_request_cannot_succeed_with_hidden_svg_and_failure_is_retryable(tmp_path):CODE
LOWtests/test_basic.py37def test_data_directory_creation():CODE
LOWtests/test_package_runtime.py66def test_installed_launcher_configuration(installed_runtime, case, expected_cookie):CODE
LOWtests/test_package_runtime.py95def test_installed_launcher_rejects_missing_explicit_configuration(installed_runtime):CODE
LOWtests/test_package_runtime.py127async def test_notification_diagnostics_use_stderr_only(notification_server, monkeypatch, capsys,CODE
LOWtests/test_package_runtime.py163def test_single_file_upgrade_keeps_requirement_server_importable(tmp_path):CODE
LOWtests/test_package_runtime.py197def test_embedded_design_package_makes_main_server_a_full_single_file(tmp_path):CODE
LOWtests/test_package_runtime.py228def test_embedded_design_payload_matches_modular_sources():CODE
LOWtests/test_design_media.py39def test_region_maps_design_units_to_crop_pixels_and_clamps():CODE
LOWtests/test_design_media.py51def test_region_pixels_and_mapping_respect_nonzero_canvas_origin():CODE
LOWtests/test_design_media.py66def test_labels_are_source_order_stable_and_measurements_are_geometry_only():CODE
LOWtests/test_design_media.py77def test_missing_hidden_and_outside_nodes_do_not_get_invented_positions():CODE
LOWtests/test_design_media.py84def test_degenerate_or_invalid_node_bounds_do_not_break_valid_visual_evidence():CODE
111 more matches not shown…
Decorative Section Separators36 hits · 112 pts
SeverityFileLineSnippetContext
MEDIUM⚡setup-env.sh61# ==============================================COMMENT
MEDIUM⚡setup-env.sh63# ==============================================COMMENT
MEDIUM⚡setup-env.sh68# ==============================================COMMENT
MEDIUM⚡setup-env.sh70# ==============================================COMMENT
MEDIUM⚡setup-env.sh78# ==============================================COMMENT
MEDIUM⚡setup-env.sh80# ==============================================COMMENT
MEDIUM⚡setup-env.sh85# ==============================================COMMENT
MEDIUM⚡setup-env.sh87# ==============================================COMMENT
MEDIUM⚡setup-env.sh92# ==============================================COMMENT
MEDIUM⚡setup-env.sh94# ==============================================COMMENT
MEDIUMsetup-env.sh105# ==============================================COMMENT
MEDIUMsetup-env.sh107# ==============================================COMMENT
MEDIUMeasy-install.sh46# ============================================COMMENT
MEDIUMeasy-install.sh48# ============================================COMMENT
MEDIUMeasy-install.sh102# ============================================COMMENT
MEDIUMeasy-install.sh104# ============================================COMMENT
MEDIUMeasy-install.sh213# ============================================COMMENT
MEDIUMeasy-install.sh215# ============================================COMMENT
MEDIUMeasy-install.sh309# ============================================COMMENT
MEDIUMeasy-install.sh311# ============================================COMMENT
MEDIUMeasy-install.sh325# ============================================COMMENT
MEDIUMeasy-install.sh327# ============================================COMMENT
MEDIUMdocker-compose.yml25# ============================================COMMENT
MEDIUMdocker-compose.yml27# ============================================COMMENT
MEDIUM⚡lanhu_mcp_server.py2515# ============================================STRING
MEDIUM⚡lanhu_mcp_server.py2517# ============================================STRING
MEDIUMlanhu_mcp_server.py2357# ============================================STRING
MEDIUMlanhu_mcp_server.py2359# ============================================STRING
MEDIUMlanhu_mcp_server.py6096# ============================================STRING
MEDIUMlanhu_mcp_server.py6098# ============================================STRING
MEDIUMtests/test_product_documents.py22# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_product_documents.py24# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_product_documents.py42# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_product_documents.py44# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_product_documents.py61# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_product_documents.py63# ---------------------------------------------------------------------------COMMENT
Empty Error Handlers19 hits · 58 pts
SeverityFileLineSnippetContext
HIGHlanhu_mcp_server.py514except ImportError:CODE
HIGHlanhu_mcp_server.py2853except Exception:CODE
HIGHlanhu_mcp_server.py3000except Exception:CODE
HIGHlanhu_mcp_server.py3445except Exception:CODE
HIGHlanhu_mcp_server.py3714except Exception:CODE
HIGHlanhu_mcp_server.py5553except Exception:CODE
HIGHlanhu_mcp_server.py2547except Exception:CODE
HIGHlanhu_mcp_server.py2994except Exception:CODE
HIGHlanhu_mcp_server.py7276except Exception:CODE
HIGHlanhu_mcp_server.py5042except Exception:CODE
HIGHlanhu_mcp_server.py5051except Exception:CODE
HIGHlanhu_mcp_server.py5059except Exception:CODE
HIGHlanhu_mcp_server.py5477except Exception:CODE
HIGHlanhu_mcp_server.py5495except Exception:CODE
HIGHlanhu_mcp_server.py5485except Exception:CODE
HIGHlanhu_design/media.py355except (OSError, ValueError, AttributeError, TypeError):CODE
HIGHlanhu_design/media.py264except ValueError:CODE
HIGHlanhu_design/media.py378except (OSError, ValueError):CODE
HIGHlanhu_design/install.py267except OSError:CODE
Excessive Try-Catch Wrapping44 hits · 23 pts
SeverityFileLineSnippetContext
LOW⚡lanhu_mcp_server.py5033 except Exception:CODE
LOW⚡lanhu_mcp_server.py5042 except Exception:CODE
LOW⚡lanhu_mcp_server.py5051 except Exception:CODE
LOW⚡lanhu_mcp_server.py5059 except Exception:CODE
LOW⚡lanhu_mcp_server.py5477 except Exception:CODE
LOW⚡lanhu_mcp_server.py5485 except Exception:CODE
LOW⚡lanhu_mcp_server.py5495 except Exception:CODE
LOWlanhu_mcp_server.py541 except Exception:CODE
LOWlanhu_mcp_server.py4992 except Exception:CODE
LOWlanhu_mcp_server.py5022 except Exception:CODE
LOWlanhu_mcp_server.py5462 except Exception as tile_error:CODE
LOWlanhu_mcp_server.py5532 except Exception as e:CODE
LOWlanhu_mcp_server.py5553 except Exception:CODE
LOWlanhu_mcp_server.py5620 except Exception as e:CODE
LOWlanhu_mcp_server.py5631 except Exception as e:CODE
LOWlanhu_mcp_server.py6982 except Exception as e:CODE
LOWlanhu_mcp_server.py7193 except Exception as e:CODE
LOWlanhu_mcp_server.py7230 except Exception as e:CODE
LOWlanhu_mcp_server.py7276 except Exception:CODE
LOWlanhu_mcp_server.py7542 except Exception as e:CODE
LOWlanhu_mcp_server.py7670 except Exception as e:CODE
LOWlanhu_mcp_server.py8110 except Exception as e:CODE
LOWlanhu_mcp_server.py8267 except Exception as exc:CODE
LOWlanhu_mcp_server.py8292 except Exception as exc:CODE
LOWlanhu_mcp_server.py8314 except Exception as exc:CODE
LOW⚡lanhu_mcp_server.py2510 except Exception as e:STRING
LOW⚡lanhu_mcp_server.py4824 except Exception:STRING
LOWlanhu_mcp_server.py2547 except Exception:STRING
LOWlanhu_mcp_server.py2745 except Exception:STRING
LOWlanhu_mcp_server.py2853 except Exception:STRING
LOWlanhu_mcp_server.py2967 except Exception:STRING
LOWlanhu_mcp_server.py2994 except Exception:STRING
LOWlanhu_mcp_server.py3000 except Exception:STRING
LOWlanhu_mcp_server.py3222 except Exception:STRING
LOWlanhu_mcp_server.py3307 except Exception:STRING
LOWlanhu_mcp_server.py3445 except Exception:STRING
LOWlanhu_mcp_server.py3473 except Exception:STRING
LOWlanhu_mcp_server.py3714 except Exception:STRING
LOWlanhu_mcp_server.py4807 except Exception as exc:STRING
LOWlanhu_mcp_server.py4811 except Exception:STRING
LOWlanhu_design/service.py115 except Exception as exc:CODE
LOWlanhu_design/media.py395 except Exception:CODE
LOWlanhu_design/install.py318 except Exception as exc:CODE
LOW⚡tests/test_product_documents.py232 except Exception as e:CODE
Deep Nesting31 hits · 20 pts
SeverityFileLineSnippetContext
LOWlanhu_mcp_server.py790CODE
LOWlanhu_mcp_server.py828CODE
LOWlanhu_mcp_server.py927CODE
LOWlanhu_mcp_server.py1085CODE
LOWlanhu_mcp_server.py1331CODE
LOWlanhu_mcp_server.py1823CODE
LOWlanhu_mcp_server.py2361CODE
LOWlanhu_mcp_server.py2894CODE
LOWlanhu_mcp_server.py4384CODE
LOWlanhu_mcp_server.py4878CODE
LOWlanhu_mcp_server.py4963CODE
LOWlanhu_mcp_server.py6369CODE
LOWlanhu_mcp_server.py6715CODE
LOWlanhu_mcp_server.py7076CODE
LOWlanhu_mcp_server.py7427CODE
LOWlanhu_mcp_server.py7700CODE
LOWlanhu_mcp_server.py1206CODE
LOWlanhu_mcp_server.py1931CODE
LOWlanhu_mcp_server.py2413CODE
LOWlanhu_mcp_server.py3168CODE
LOWlanhu_mcp_server.py3816CODE
LOWlanhu_mcp_server.py3868CODE
LOWlanhu_design/service.py98CODE
LOWlanhu_design/service.py465CODE
LOWlanhu_design/media.py94CODE
LOWlanhu_design/media.py319CODE
LOWlanhu_design/media.py359CODE
LOWlanhu_design/variants.py148CODE
LOWlanhu_design/normalize.py139CODE
LOWlanhu_design/text.py97CODE
LOWlanhu_design/install.py194CODE
Unused Imports12 hits · 12 pts
SeverityFileLineSnippetContext
LOWlanhu_mcp_server.py7489CODE
LOWlanhu_design/service.py3CODE
LOWlanhu_design/media.py7CODE
LOWlanhu_design/normalize.py8CODE
LOWlanhu_design/text.py8CODE
LOWlanhu_design/install.py8CODE
LOWtests/test_basic.py19CODE
LOWtests/test_basic.py20CODE
LOWtests/test_basic.py21CODE
LOWtests/test_basic.py22CODE
LOWtests/test_basic.py23CODE
LOWscripts/embed_lanhu_design.py4CODE
Docstring Block Structure2 hits · 8 pts
SeverityFileLineSnippetContext
HIGHCONTRIBUTING.md124 从蓝湖URL获取元数据 Args: url: 蓝湖文档URL use_cache: 是否使用缓存,默认为True Returns: 包含元数据的字典 RSTRING
HIGHlanhu_mcp_server.py3170文档被替换后旧 docId 失效,通过 product_documents 定位当前有效 axure 文档。 Args: project_id: 项目 ID team_id:STRING
Over-Commented Block5 hits · 4 pts
SeverityFileLineSnippetContext
LOWsetup-env.sh61# ==============================================COMMENT
LOWdocker-compose.yml21 - SERVER_PORT=8000COMMENT
LOWdocker-compose.yml41# docker-compose downCOMMENT
LOWdocker-compose.yml61#COMMENT
LOWlanhu_mcp_server.py6001 #### 正向场景(P0)COMMENT
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_requirement_cache.py87 # Keep this test focused on orchestration; FastMCP image decoding is covered elsewhere.COMMENT
AI Structural Patterns3 hits · 2 pts
SeverityFileLineSnippetContext
LOWlanhu_mcp_server.py6715CODE
LOWlanhu_mcp_server.py2614CODE
LOWlanhu_design/service.py302CODE
Verbosity Indicators3 hits · 1 pts
SeverityFileLineSnippetContext
LOW⚡lanhu_mcp_server.py2235 # Step 1: 从 CSS 规则中收集 url -> class_name 映射STRING
LOW⚡lanhu_mcp_server.py2245 # Step 2: 替换 <img src="...">,优先用 img 的 class 属性STRING
LOWlanhu_mcp_server.py2260 # Step 3: 替换 CSS url(...) 背景图,用 CSS 类名作文件名STRING
Structural Annotation Overuse3 hits · 1 pts
SeverityFileLineSnippetContext
LOW⚡lanhu_mcp_server.py2235 # Step 1: 从 CSS 规则中收集 url -> class_name 映射STRING
LOW⚡lanhu_mcp_server.py2245 # Step 2: 替换 <img src="...">,优先用 img 的 class 属性STRING
LOWlanhu_mcp_server.py2260 # Step 3: 替换 CSS url(...) 背景图,用 CSS 类名作文件名STRING
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtests/test_package_runtime.py146 monkeypatch.setattr(server, "FEISHU_USER_ID_MAP", {"FixtureUser": "fake-user-id"})CODE