Open
Description
Whenever there is a lambda, scip-python will produce a malformatted symbol. Any downstream consumer of SCIP which is expecting spec-compliant output will break.
Reproducing
Create a directory with a single Python file. Call it test-python.py
Add a single line:
f = lambda e: e
cd to that directory and run scip-python index
By running scip print
on the generated file, we can see that scip-python has produced a symbol named "local 0(e)". This is bad because the spec does not permit '(' or ')' to appear in identifiers. https://github.com/sourcegraph/scip/blob/main/scip.proto#L155
&scip.Occurrence{
Range: []int32{
0,
11,
12,
},
Symbol: "local 0(e)",
SymbolRoles: 1,
OverrideDocumentation: []string(nil),
SyntaxKind: 0,
Diagnostics: []*scip.Diagnostic(nil),
EnclosingRange: []int32(nil),
},
&scip.Occurrence{
Range: []int32{
0,
14,
15,
},
Symbol: "local 0(e)",
SymbolRoles: 8,
OverrideDocumentation: []string(nil),
SyntaxKind: 0,
Diagnostics: []*scip.Diagnostic(nil),
EnclosingRange: []int32(nil),
},
Because of this, any spec-complaint downstream consumer will choke.
In particular, the scip snapshot
command fails.
(venv) ubuntu@ip-172-31-88-164:~/scip$ go run ./cmd/scip/ snapshot --from test_python/index.scip
test_python.py: use --strict=false to ignore this error: 2 errors occurred:
* local 0(e): expected format 'local <simple-identifier>' but got: local 0(e)
* local 0(e): expected format 'local <simple-identifier>' but got: local 0(e)
exit status 1
Also, the SCIP-importer in Facebook's Glean chokes.