mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 18:29:53 +08:00
v3 parser: add some more test cases (functions) (#2422)
* [v3] add test case for parser (create struct from func) * [v3] add another test case for parser (func in other pkg) + misc
This commit is contained in:
parent
ecc1791420
commit
0f80f031fd
@ -13,6 +13,8 @@ This package contains the static analyser used for parsing Wails projects so tha
|
|||||||
- [ ] Assignment
|
- [ ] Assignment
|
||||||
- [x] Struct Literal Pointer
|
- [x] Struct Literal Pointer
|
||||||
- [ ] Function
|
- [ ] Function
|
||||||
|
- [ ] Same package
|
||||||
|
- [ ] Different package
|
||||||
- [ ] Function
|
- [ ] Function
|
||||||
|
|
||||||
- [x] Parsing of bound methods
|
- [x] Parsing of bound methods
|
||||||
|
@ -239,6 +239,10 @@ func (p *Project) findApplicationNewCalls(pkgs map[string]*ParsedPackage) (err e
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the assignment is the result of a function call
|
||||||
|
if _, ok := assign.Rhs[0].(*ast.CallExpr); ok {
|
||||||
|
println("TODO: Parsing call expression")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1154,6 +1154,157 @@ func TestParseDirectory(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "should find a bound services using a variable from function call",
|
||||||
|
dir: "testdata/variable_single_from_function",
|
||||||
|
wantErr: false,
|
||||||
|
wantBoundMethods: map[string]map[string][]*BoundMethod{
|
||||||
|
"main": {
|
||||||
|
"GreetService": {
|
||||||
|
{
|
||||||
|
Name: "Greet",
|
||||||
|
DocComment: "Greet someone\n",
|
||||||
|
Inputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "name",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Outputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should find a bound services using a variable from function call in another package",
|
||||||
|
dir: "testdata/variable_single_from_other_function",
|
||||||
|
wantErr: false,
|
||||||
|
wantBoundMethods: map[string]map[string][]*BoundMethod{
|
||||||
|
"main": {
|
||||||
|
"GreetService": {
|
||||||
|
{
|
||||||
|
Name: "Greet",
|
||||||
|
DocComment: "Greet does XYZ\n",
|
||||||
|
Inputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "name",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Outputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "NewPerson",
|
||||||
|
DocComment: "NewPerson creates a new person\n",
|
||||||
|
Inputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "name",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Outputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Name: "",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "Person",
|
||||||
|
IsPointer: true,
|
||||||
|
IsStruct: true,
|
||||||
|
Package: "main",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"github.com/wailsapp/wails/v3/internal/parser/testdata/variable_single_from_other_function/services": {
|
||||||
|
"OtherService": {
|
||||||
|
{
|
||||||
|
Name: "Yay",
|
||||||
|
Outputs: []*Parameter{
|
||||||
|
{
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "Address",
|
||||||
|
IsStruct: true,
|
||||||
|
IsPointer: true,
|
||||||
|
Package: "github.com/wailsapp/wails/v3/internal/parser/testdata/variable_single_from_other_function/services",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantModels: map[string]map[string]*StructDef{
|
||||||
|
"main": {
|
||||||
|
"Person": {
|
||||||
|
Name: "Person",
|
||||||
|
Fields: []*Field{
|
||||||
|
{
|
||||||
|
Name: "Name",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Address",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "Address",
|
||||||
|
IsStruct: true,
|
||||||
|
IsPointer: true,
|
||||||
|
Package: "github.com/wailsapp/wails/v3/internal/parser/testdata/variable_single_from_other_function/services",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"github.com/wailsapp/wails/v3/internal/parser/testdata/variable_single_from_other_function/services": {
|
||||||
|
"Address": {
|
||||||
|
Name: "Address",
|
||||||
|
Fields: []*Field{
|
||||||
|
{
|
||||||
|
Name: "Street",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "State",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Country",
|
||||||
|
Type: &ParameterType{
|
||||||
|
Name: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
40
v3/internal/parser/testdata/variable_single_from_function/main.go
vendored
Normal file
40
v3/internal/parser/testdata/variable_single_from_function/main.go
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
"github.com/wailsapp/wails/v3/pkg/application"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GreetService is great
|
||||||
|
type GreetService struct {
|
||||||
|
SomeVariable int
|
||||||
|
lowerCase string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Greet someone
|
||||||
|
func (*GreetService) Greet(name string) string {
|
||||||
|
return "Hello " + name
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGreetService() *GreetService {
|
||||||
|
return &GreetService{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
greetService := NewGreetService()
|
||||||
|
app := application.New(application.Options{
|
||||||
|
Bind: []interface{}{
|
||||||
|
greetService,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
app.NewWebviewWindow()
|
||||||
|
|
||||||
|
err := app.Run()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
50
v3/internal/parser/testdata/variable_single_from_other_function/main.go
vendored
Normal file
50
v3/internal/parser/testdata/variable_single_from_other_function/main.go
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
"github.com/wailsapp/wails/v3/internal/parser/testdata/variable_single_from_other_function/services"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/wailsapp/wails/v3/pkg/application"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GreetService is great
|
||||||
|
type GreetService struct {
|
||||||
|
SomeVariable int
|
||||||
|
lowerCase string
|
||||||
|
target *Person
|
||||||
|
}
|
||||||
|
|
||||||
|
type Person struct {
|
||||||
|
Name string
|
||||||
|
Address *services.Address
|
||||||
|
}
|
||||||
|
|
||||||
|
// Greet does XYZ
|
||||||
|
func (*GreetService) Greet(name string) string {
|
||||||
|
return "Hello " + name
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPerson creates a new person
|
||||||
|
func (*GreetService) NewPerson(name string) *Person {
|
||||||
|
return &Person{Name: name}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
otherService := services.NewOtherService()
|
||||||
|
app := application.New(application.Options{
|
||||||
|
Bind: []interface{}{
|
||||||
|
&GreetService{},
|
||||||
|
otherService,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
app.NewWebviewWindow()
|
||||||
|
|
||||||
|
err := app.Run()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
26
v3/internal/parser/testdata/variable_single_from_other_function/services/other.go
vendored
Normal file
26
v3/internal/parser/testdata/variable_single_from_other_function/services/other.go
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package services
|
||||||
|
|
||||||
|
// OtherService is a struct
|
||||||
|
// that does things
|
||||||
|
type OtherService struct {
|
||||||
|
t int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Address struct {
|
||||||
|
Street string
|
||||||
|
State string
|
||||||
|
Country string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yay does this and that
|
||||||
|
func (o *OtherService) Yay() *Address {
|
||||||
|
return &Address{
|
||||||
|
Street: "123 Pitt Street",
|
||||||
|
State: "New South Wales",
|
||||||
|
Country: "Australia",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewOtherService() *OtherService {
|
||||||
|
return &OtherService{}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user