`parse python` panics in `LSPClient.Locate` (`slice bounds out of range`) when following imports into `.venv`
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 55/100
Hướng nghiên cứu
Bắt đầu với lang/lsp/lsp_methods.go:316 và lang/collect/collect.go:2114, sau đó tái hiện bằng abcoder parse python . -o /tmp/ast.json trên một dự án Python 3.12 có .venv chứa đầy đủ nội dung. Xác nhận rằng các range không hợp lệ không còn gây panic và token bị ảnh hưởng được bỏ qua hoặc được báo cáo là một lỗi; so sánh hành vi với --exclude .venv.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
parse python panics in LSPClient.Locate (slice bounds out of range [13:6]) when following imports into .venv
Repo: cloudwego/abcoder
Labels: bug, language/python, crash
Summary
When parsing a Python project whose source imports modules from a .venv/ containing Python 3.12 syntax that the bundled jedi 0.19.1 / parso 0.8.4 cannot fully parse, abcoder hard-crashes:
panic: runtime error: slice bounds out of range [13:6]
goroutine 1 [running]:
github.com/cloudwego/abcoder/lang/lsp.(*LSPClient).Locate(...)
/tmp/abcoder-build/lang/lsp/lsp_methods.go:316 +0x430
github.com/cloudwego/abcoder/lang/collect.(*Collector).getSymbolByLocation(...)
/tmp/abcoder-build/lang/collect/collect.go:2114 +0xe58
github.com/cloudwego/abcoder/lang/collect.(*Collector).getSymbolByTokenWithLimit(...)
github.com/cloudwego/abcoder/lang/collect.(*Collector).getDepsWithLimit(...)
github.com/cloudwego/abcoder/lang/collect.(*Collector).processSymbol(...)
/tmp/abcoder-build/lang/collect/collect.go:2245 +0x328
github.com/cloudwego/abcoder/lang/collect.(*Collector).Collect(...)
/tmp/abcoder-build/lang/collect/collect.go:206 +0x3c0
The panic is preceded by hundreds of warnings like:
[ERROR] collect.go:2306: get type symbol for token {file:///.../.venv/lib/python3.12/site-packages/redis/_parsers/socket.py:115:24-115:32 function [] readline} failed: definition of token ... not found
…and pylsp stderr noise from the pylsp_semantic_tokens hook:
WARNING - pylsp.config.config - Failed to load hook pylsp_semantic_tokens:
'Newline' object has no attribute 'children'
AttributeError in jedi/inference/syntax_tree.py:460 (infer_or_test)
jedi/parso returns a malformed range (start 13 > end 6), and lang/lsp/lsp_methods.go:316 slices a string with that range without bounds-checking → panic.
Reproduction
# Project: any Python 3.12 project with a populated .venv that contains
# files using PEP 701 f-strings or other 3.12-only syntax (e.g. attrs, redis).
abcoder parse python . -o /tmp/ast.json
# …jedi follows imports into .venv/...redis/_parsers/socket.py
# panic: runtime error: slice bounds out of range [13:6]
Expected
LSPClient.Locateshould validate theRangeit receives (Start <= End, both within document bounds) and return an error instead of panicking.- Higher up,
Collector.getSymbolByLocationshould swallow such errors as a "skip this token" rather than propagating a panic. - Optionally:
parse pythonshould default to excluding common virtualenv directories (.venv,venv,env) since they're never the parse target — they're only ever followed transitively, which is what triggers the bad ranges.
Workaround
Pass --exclude .venv (and any other vendored Python trees):
abcoder parse python . -o /tmp/ast.json --exclude .venv
Root cause notes (for triage)
The malformed range originates from jedi's syntax-tree inference on certain 3.12 constructs that parso 0.8.4 represents incorrectly (e.g. Newline nodes appearing where parso normally yields simple_stmt children). Bumping parso to ≥0.8.5 in the bundled pylsp fork's deps may eliminate the source — but the Go side should still bounds-check defensively.
Environment
- abcoder
v0.0.0-20260427034146-9d8ecc5873be+dirty - macOS 25.3.0 (arm64)
- jedi 0.19.1, parso 0.8.4 (in miniconda Python 3.10)
- Project: Python 3.12 with
.venvcontainingattrs,redis,pydantic, etc.
- Ngôn ngữ chính
- Go
- Star
- 391
- Fork
- 58
- Merge trung bình
- 2 ngày 21 giờ
- Pull request đã merge (30 ngày)
- 1
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của cloudwego/abcoder
-
Add native Codex hook support Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
-
Better error reporting Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
-
How to run the HTTP Mcp Server Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
Tất cả issue của cloudwego/abcoder
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 60/100
github/gh-aw-mcpg#13748 ·
-
agentic-workflows
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
googleapis/librarian#7670 · 2 bình luận ·