blob: 0b26d57b42215786154cf089e5d8c564e6adb01b [file] [log] [blame]
This test exercises the "go_context" MCP tool.
-- flags --
-mcp
-ignore_extra_diags
-- settings.json --
{
"mcpTools": {
"go_context": true
}
}
-- go.mod --
module example.com
-- a/main.go --
// File doc for main.go part 1.
package main
// File doc for main.go part 2.
import(
"example.com/a/comment"
)
// File doc for main.go part 3.
// doc comment for func foo.
func foo() {//@mcptool("go_context", `{"file": "$WORKDIR/a/main.go"}`, output=withComment)
comment.Foo("", 0)
}
-- a/a.go --
// File doc for a.go.
package main
// doc comment for func a.
func a () {}
// doc comment for type b.
type b struct {}
// doc comment for const c.
const c = ""
// doc comment for var d.
var d int
-- a/comment/doc.go --
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
Package doc for package comment.
*/
package comment
-- a/comment/comment.go --
// File doc for comment.go part 1.
package comment
// File doc for comment.go part 2.
import (
// comment for package renaming.
myfmt "fmt"
)
// File doc for comment.go part 3.
// doc comment for comment.Foo
func Foo(foo string, _ int) {
myfmt.Printf("%s", foo)
}
// Random comment floating around.
-- @withComment --
Current package "example.com/a" (package main):
main.go (current file):
```go
// File doc for main.go part 1.
package main
// File doc for main.go part 2.
import(
"example.com/a/comment"
)
// File doc for main.go part 3.
// doc comment for func foo.
func foo()
```
a.go:
```go
// File doc for a.go.
package main
// doc comment for func a.
func a ()
// doc comment for type b.
type b struct {}
// doc comment for const c.
const c = ""
// doc comment for var d.
var d int
```
Current file "main.go" contains this import declaration:
```go
import(
"example.com/a/comment"
)
```
The imported packages declare the following symbols:
"example.com/a/comment" (package comment)
comment.go:
```go
// File doc for comment.go part 1.
package comment
// File doc for comment.go part 2.
import (
// comment for package renaming.
myfmt "fmt"
)
// File doc for comment.go part 3.
// doc comment for comment.Foo
func Foo(foo string, _ int)
```
doc.go:
```go
/*
Package doc for package comment.
*/
package comment
```
-- b/main.go --
package main
import(
"example.com/b/function"
)
func testFunction() {//@mcptool("go_context", `{"file":"$WORKDIR/b/main.go"}`, output=withFunction)
function.Foo(0, "")
}
-- b/function/function.go --
package function
func Foo(int, string) {}
func foo(string, int) {}
type unexported struct {}
func (*unexported) unexported(int) {}
func (*unexported) Exported(int) {}
type Exported struct{}
func (*Exported) unexported(int) {}
func (*Exported) Exported(int) {}
-- @withFunction --
Current package "example.com/b" (package main):
main.go (current file):
```go
package main
import(
"example.com/b/function"
)
func testFunction()
```
Current file "main.go" contains this import declaration:
```go
import(
"example.com/b/function"
)
```
The imported packages declare the following symbols:
"example.com/b/function" (package function)
function.go:
```go
package function
func Foo(int, string)
type Exported struct{}
func (*Exported) Exported(int)
```
-- c/main.go --
package main
import(
"example.com/c/types"
)
var x types.Exported //@mcptool("go_context", `{"file":"$WORKDIR/c/main.go"}`, output=withType)
-- c/types/types.go --
package types
// Doc for exported.
type Exported struct {
// Doc for exported.
Exported string
// Doc for unexported.
unexported string
}
// Doc for types.
type (
// Doc for Foo first line.
// Doc for Foo second line.
Foo struct {
foo string
}
// Doc for foo.
foo struct {}
// Doc for Bar.
Bar struct {
bar string
}
// Doc for bar.
bar struct {}
)
-- @withType --
Current package "example.com/c" (package main):
main.go (current file):
```go
package main
import(
"example.com/c/types"
)
var x types.Exported
```
Current file "main.go" contains this import declaration:
```go
import(
"example.com/c/types"
)
```
The imported packages declare the following symbols:
"example.com/c/types" (package types)
types.go:
```go
package types
// Doc for exported.
type Exported struct {
// Doc for exported.
Exported string
// Doc for unexported.
unexported string
}
// Doc for types.
type (
// Doc for Foo first line.
// Doc for Foo second line.
Foo struct {
foo string
}
// Doc for Bar.
Bar struct {
bar string
}
)
```
-- d/main.go --
package main
import(
"example.com/d/values"
)
var y values.ConstFoo //@mcptool("go_context", `{"file":"$WORKDIR/d/main.go"}`, output=withValue)
-- d/values/consts.go --
package values
const (
// doc for ConstFoo
ConstFoo = "Foo" // comment for ConstFoo
// doc for constFoo
constFoo = "foo" // comment for constFoo
// doc for ConstBar
ConstBar = "Bar" // comment for ConstBar
// doc for constBar
constBar = "bar" // comment for constBar
)
// doc for ConstExported
const ConstExported = "Exported" // comment for ConstExported
// doc for constUnexported
var constUnexported = "unexported" // comment for constUnexported
-- d/values/vars.go --
package values
var (
// doc for VarFoo
VarFoo = "Foo" // comment for VarFoo
// doc for varFoo
varFoo = "foo" // comment for varFoo
// doc for VarBar
VarBar = "Bar" // comment for VarBar
// doc for varBar
varBar = "bar" // comment for varBar
)
// doc for VarExported
var VarExported = "Exported" // comment for VarExported
// doc for varUnexported
var varUnexported = "unexported" // comment for varUnexported
-- @withValue --
Current package "example.com/d" (package main):
main.go (current file):
```go
package main
import(
"example.com/d/values"
)
var y values.ConstFoo
```
Current file "main.go" contains this import declaration:
```go
import(
"example.com/d/values"
)
```
The imported packages declare the following symbols:
"example.com/d/values" (package values)
consts.go:
```go
package values
const (
// doc for ConstFoo
ConstFoo = "Foo" // comment for ConstFoo
// doc for ConstBar
ConstBar = "Bar" // comment for ConstBar
)
// doc for ConstExported
const ConstExported = "Exported" // comment for ConstExported
```
vars.go:
```go
package values
var (
// doc for VarFoo
VarFoo = "Foo" // comment for VarFoo
// doc for VarBar
VarBar = "Bar" // comment for VarBar
)
// doc for VarExported
var VarExported = "Exported" // comment for VarExported
```
-- e/main.go --
package main
func main() {} //@mcptool("go_context", `{"file":"$WORKDIR/e/main.go"}`, output=samePackage)
-- e/foo.go --
package main
var (
foo string
Foo string
)
-- e/bar.go --
package main
const (
bar = ""
Bar = ""
)
-- e/baz.go --
package main
func baz(int) string {
return ""
}
func Baz(string) int {
return 0
}
-- @samePackage --
Current package "example.com/e" (package main):
main.go (current file):
```go
package main
func main()
```
bar.go:
```go
package main
const (
bar = ""
Bar = ""
)
```
baz.go:
```go
package main
func baz(int) string
func Baz(string) int
```
foo.go:
```go
package main
var (
foo string
Foo string
)
```
-- f/main.go --
package main
import "fmt"
func Foo() { //@mcptool("go_context", `{"file":"$WORKDIR/f/main.go"}`, output=withoutStdLib)
fmt.Println("foo")
}
-- @withoutStdLib --
Current package "example.com/f" (package main):
main.go (current file):
```go
package main
import "fmt"
func Foo()
```
Current file "main.go" contains this import declaration:
```go
import "fmt"
```