sourcegraph / scip-python

SCIP indexer for Python
Other
46 stars 21 forks source link

scip-python produces malformatted symbol for every lambda #148

Open jkoppel opened 5 months ago

jkoppel commented 5 months ago

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.

jkoppel commented 5 months ago

Related: https://github.com/sourcegraph/scip-typescript/issues/314