JS Object generation. Linting.

This commit is contained in:
Lea Anthony
2020-11-11 05:58:41 +11:00
parent c3313c90ef
commit 6d3f4c06f1
8 changed files with 80 additions and 47 deletions

View File

@@ -147,7 +147,7 @@ func (p *Parser) parseField(file *ast.File, field *ast.Field, pkg *Package) ([]*
default:
spew.Dump(t)
return nil, fmt.Errorf("Unsupported field found in struct: %+v", t)
return nil, fmt.Errorf("unsupported field found in struct: %+v", t)
}
// Loop over names if we have

View File

@@ -69,26 +69,33 @@ func (p *Parser) findBoundStructs(pkg *Package) error {
return false
}
if strct == nil {
parseError = fmt.Errorf("Unable to resolve function returntype: %s", fn.Name)
parseError = fmt.Errorf("unable to resolve function returntype: %s", fn.Name)
return false
}
println("Found bound function return type:", strct.Name)
strct.Package.boundStructs.Add(strct.Name)
// case *ast.SelectorExpr:
// ident, ok := fn.X.(*ast.Ident)
// if !ok {
// return true
// }
// packageName := ident.Name
// functionName := fn.Sel.Name
// println("Found bound function:", packageName+"."+functionName)
case *ast.SelectorExpr:
ident, ok := fn.X.(*ast.Ident)
if !ok {
return true
}
packageName := ident.Name
functionName := fn.Sel.Name
println("Found bound function:", packageName+"."+functionName)
// strct := p.getFunctionReturnType(packageName, functionName)
// if strct == nil {
// // Unable to resolve function
// return true
// }
// boundStructs = append(boundStructs, strct)
// Get package for package name
externalPackageName := pkg.getImportByName(packageName, fileAst)
externalPackage := p.getPackageByID(externalPackageName.ID)
strct, err := p.getFunctionReturnType(externalPackage, functionName)
if err != nil {
parseError = err
return false
}
if strct == nil {
// Unable to resolve function
return true
}
externalPackage.boundStructs.Add(strct.Name)
}
// Binding struct pointer literals

View File

@@ -44,19 +44,13 @@ func (p *Parser) generateModule() error {
for _, pkg := range packagesToGenerate {
// Calculate directory
dir := filepath.Join(moduleDir, pkg.gopackage.Name)
// Create the directory if it doesn't exist
fs.Mkdir(dir)
err := generatePackage(pkg, dir)
err := generatePackage(pkg, moduleDir)
if err != nil {
return err
}
}
// Copy the package file
// Copy the standard files
srcFile := fs.RelativePath("./package.json")
tgtFile := filepath.Join(moduleDir, "package.json")
err = fs.CopyFile(srcFile, tgtFile)
@@ -64,6 +58,14 @@ func (p *Parser) generateModule() error {
return err
}
// Copy the globals.d.ts file
srcFile = fs.RelativePath("./globals.d.ts")
tgtFile = filepath.Join(moduleDir, "globals.d.ts")
err = fs.CopyFile(srcFile, tgtFile)
if err != nil {
return err
}
// Generate the index.js file
err = generateIndexJS(moduleDir, packagesToGenerate)
if err != nil {
@@ -97,28 +99,28 @@ func createBackendJSDirectory() (string, error) {
func generatePackage(pkg *Package, moduledir string) error {
// Get path to local file
typescriptTemplateFile := fs.RelativePath("./package.d.template")
// // Get path to local file
// typescriptTemplateFile := fs.RelativePath("./package.d.template")
// Load typescript template
typescriptTemplateData := fs.MustLoadString(typescriptTemplateFile)
typescriptTemplate, err := template.New("typescript").Parse(typescriptTemplateData)
if err != nil {
return errors.Wrap(err, "Error creating template")
}
// // Load typescript template
// typescriptTemplateData := fs.MustLoadString(typescriptTemplateFile)
// typescriptTemplate, err := template.New("typescript").Parse(typescriptTemplateData)
// if err != nil {
// return errors.Wrap(err, "Error creating template")
// }
// Execute javascript template
var buffer bytes.Buffer
err = typescriptTemplate.Execute(&buffer, pkg)
if err != nil {
return errors.Wrap(err, "Error generating code")
}
// err = typescriptTemplate.Execute(&buffer, pkg)
// if err != nil {
// return errors.Wrap(err, "Error generating code")
// }
// Save typescript file
err = ioutil.WriteFile(filepath.Join(moduledir, "index.d.ts"), buffer.Bytes(), 0755)
if err != nil {
return errors.Wrap(err, "Error writing backend package file")
}
// // Save typescript file
// err = ioutil.WriteFile(filepath.Join(moduledir, "index.d.ts"), buffer.Bytes(), 0755)
// if err != nil {
// return errors.Wrap(err, "Error writing backend package file")
// }
// Get path to local file
javascriptTemplateFile := fs.RelativePath("./package.template")
@@ -139,7 +141,7 @@ func generatePackage(pkg *Package, moduledir string) error {
}
// Save javascript file
err = ioutil.WriteFile(filepath.Join(moduledir, "index.js"), buffer.Bytes(), 0755)
err = ioutil.WriteFile(filepath.Join(moduledir, "_"+pkg.Name+".js"), buffer.Bytes(), 0755)
if err != nil {
return errors.Wrap(err, "Error writing backend package file")
}

6
v2/pkg/parser/globals.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
interface window {
backend: any
}

View File

@@ -2,7 +2,7 @@
// This file is automatically generated. DO NOT EDIT
{{- range .}}
const {{.Name}} = require('./{{.Name}}');
const {{.Name}} = require('./_{{.Name}}');
{{- end}}
module.exports = {

View File

@@ -2,6 +2,21 @@
// This file is automatically generated. DO NOT EDIT
{{- range $struct := .Structs }}
{{- if .IsUsedAsData }}
/**
{{if .Comments }}{{range .Comments}} *{{ . }}{{end}}{{end}}
* @typedef {object} {{.Name}}
{{range .Fields}} * @property {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
{{- if .Comments}} - {{- range .Comments}}{{ . }}{{- end}}{{- end}}
{{end}} *
*/
export const {{.Name}} = {
{{- range .Fields}}
{{.Name}},
{{- end}}
}
{{- end}}
{{- if .IsBound }}
{{if .Methods }}
{{if .Comments }}{{range .Comments}}// {{ . }}{{end}}{{end}}

View File

@@ -1,3 +1,6 @@
// Package parser provides the ability to parse the data that is bound in Wails projects.
// Using this, it can also generate a Javascript module that represents the DTOs used, as
// well as providing wrappers for bound methods.
package parser
import (

View File

@@ -44,7 +44,7 @@ func parseStructNameFromStarExpr(starExpr *ast.StarExpr) (string, string, error)
pkg = i.Name
default:
// TODO: Store warnings?
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.SelectorExpr: ", i))
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.SelectorExpr: %+v", i))
}
name = x.Sel.Name
@@ -56,13 +56,13 @@ func parseStructNameFromStarExpr(starExpr *ast.StarExpr) (string, string, error)
name = s.Name
default:
// TODO: Store warnings?
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.StarExpr: ", s))
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.StarExpr: %+v", s))
}
case *ast.Ident:
name = x.Name
default:
// TODO: Store warnings?
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.StarExpr: ", starExpr))
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.StarExpr: %+v", starExpr))
}
return pkg, name, nil
}