Skip to content

Commit 2a63a68

Browse files
feat: expose semantic index through Tooling (#36)
1 parent 7e15a59 commit 2a63a68

4 files changed

Lines changed: 19 additions & 4 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.25.12
55
toolchain go1.26.4
66

77
require (
8-
github.com/codefly-dev/core v0.2.78
8+
github.com/codefly-dev/core v0.2.80
99
gopkg.in/yaml.v3 v3.0.1
1010
)
1111

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJ
3737
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
3838
github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
3939
github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
40-
github.com/codefly-dev/core v0.2.78 h1:v6fW62ZoS/umsjrz4oEEnSJ50nzXeeORMegB7nlXbXQ=
41-
github.com/codefly-dev/core v0.2.78/go.mod h1:hNxTk7ZnR5AU8imfvNJcGpoULQ1uzML5M3E4/RffWU4=
40+
github.com/codefly-dev/core v0.2.80 h1:RwBAWd+7J2ZHHY5RSllfPNlr1wP9CNTmVFQz9UM3rog=
41+
github.com/codefly-dev/core v0.2.80/go.mod h1:hNxTk7ZnR5AU8imfvNJcGpoULQ1uzML5M3E4/RffWU4=
4242
github.com/codefly-dev/gortk v0.2.0 h1:7bOlS5valYz2zil+fZctQNcPCYBcPj86abcw9N8h1hQ=
4343
github.com/codefly-dev/gortk v0.2.0/go.mod h1:dDWUMFgAP063OCGhTEpV7FFUj9+zTcxxO/nV80VKEwg=
4444
github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=

pkg/tooling/tooling.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"context"
99
"fmt"
1010

11+
corecode "github.com/codefly-dev/core/code"
1112
"github.com/codefly-dev/core/failures"
1213
basev0 "github.com/codefly-dev/core/generated/go/codefly/base/v0"
1314
codev0 "github.com/codefly-dev/core/generated/go/codefly/services/code/v0"
@@ -22,7 +23,7 @@ import (
2223
//
2324
// ARCHITECTURE: Tooling is the primary interface Mind calls for
2425
// language-specific commands. It unifies Code and Runtime:
25-
// - Analysis: GetProjectInfo (via Code)
26+
// - Analysis: GetProjectInfo + body-free semantic projection (via Code)
2627
// - Modification: Fix (ruff), ApplyEdit (via Code)
2728
// - Dev: Build, Test (pytest), Lint (ruff) (delegates to Runtime)
2829
type Tooling struct {
@@ -36,6 +37,12 @@ func New(code *pythoncode.Code, rt *pythonruntime.Runtime) *Tooling {
3637
return &Tooling{Code: code, Runtime: rt}
3738
}
3839

40+
// GetSemanticIndex delegates project parsing to the Core Code server embedded
41+
// by the Python agent; no project bytes cross the Tooling boundary.
42+
func (t *Tooling) GetSemanticIndex(ctx context.Context, req *toolingv0.GetSemanticIndexRequest) (*toolingv0.GetSemanticIndexResponse, error) {
43+
return corecode.NewSourceTooling(t.Code).GetSemanticIndex(ctx, req)
44+
}
45+
3946
// ── Code Modification ──────────────────────────────────
4047

4148
func (t *Tooling) Fix(ctx context.Context, req *toolingv0.FixRequest) (*toolingv0.FixResponse, error) {

pkg/tooling/tooling_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"path/filepath"
77
"testing"
88

9+
basev0 "github.com/codefly-dev/core/generated/go/codefly/base/v0"
910
codev0 "github.com/codefly-dev/core/generated/go/codefly/services/code/v0"
1011
toolingv0 "github.com/codefly-dev/core/generated/go/codefly/services/tooling/v0"
1112
"github.com/codefly-dev/core/resources"
@@ -69,4 +70,11 @@ func TestProjectInfoCarriesRequirementsAndImportsAcrossCodeAndTooling(t *testing
6970
len(toolingResponse.GetSourceFiles()[0].GetImports()) != 1 || toolingResponse.GetSourceFiles()[0].GetImports()[0] != "flask" {
7071
t.Fatalf("tooling project info = %+v", toolingResponse)
7172
}
73+
semantic, err := pythontooling.New(server, nil).GetSemanticIndex(context.Background(), &toolingv0.GetSemanticIndexRequest{})
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
if semantic.GetFailure() != nil || semantic.GetIndex().GetState() != basev0.SemanticIndexState_SEMANTIC_INDEX_STATE_COMPLETE || len(semantic.GetIndex().GetFiles()) != 1 {
78+
t.Fatalf("semantic index = %+v", semantic)
79+
}
7280
}

0 commit comments

Comments
 (0)