From 7494a622be99584f55562e4a6886369ecad1bdb7 Mon Sep 17 00:00:00 2001 From: ltacker Date: Fri, 12 Mar 2021 14:54:52 +0100 Subject: [PATCH 1/3] Component general file --- starport/services/scaffolder/component.go | 91 +++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 starport/services/scaffolder/component.go diff --git a/starport/services/scaffolder/component.go b/starport/services/scaffolder/component.go new file mode 100644 index 0000000000..ee806c8a49 --- /dev/null +++ b/starport/services/scaffolder/component.go @@ -0,0 +1,91 @@ +package scaffolder + +import ( + "go/token" + "os" + "path/filepath" +) + +// isComponentCreated checks if the component has been already created with Starport in the project +func isComponentCreated(appPath, moduleName, compName string) (bool, error) { + // Check for type, packet or message creation + created, err := isTypeCreated(appPath, moduleName, compName) + if err != nil { + return false, err + } + if created { + return created, nil + } + created, err = isPacketCreated(appPath, moduleName, compName) + if err != nil { + return false, err + } + if created { + return created, nil + } + return isMsgCreated(appPath, moduleName, compName) +} + +// isMsgServerDefined checks if the module uses the MsgServer convention for transactions +// this is checked by verifying the existence of the tx.proto file +func isMsgServerDefined(appPath, moduleName string) (bool, error) { + txProto, err := filepath.Abs(filepath.Join(appPath, "proto", moduleName, "tx.proto")) + if err != nil { + return false, err + } + + if _, err := os.Stat(txProto); os.IsNotExist(err) { + return false, nil + } + return true, err +} + +func isGoReservedWord(name string) bool { + // Check keyword or literal + if token.Lookup(name).IsKeyword() { + return true + } + + // Check with builtin identifier + switch name { + case + "panic", + "recover", + "append", + "bool", + "byte", + "cap", + "close", + "complex", + "complex64", + "complex128", + "uint16", + "copy", + "false", + "float32", + "float64", + "imag", + "int", + "int8", + "int16", + "uint32", + "int32", + "int64", + "iota", + "len", + "make", + "new", + "nil", + "uint64", + "print", + "println", + "real", + "string", + "true", + "uint", + "uint8", + "uintptr": + return true + } + return false +} From 7dadde9542a2fa3d941ab1ea88125864cd8f4056 Mon Sep 17 00:00:00 2001 From: ltacker Date: Fri, 12 Mar 2021 14:55:10 +0100 Subject: [PATCH 2/3] iscomponentcreated --- starport/services/scaffolder/message.go | 6 +-- starport/services/scaffolder/packet.go | 6 +-- starport/services/scaffolder/type.go | 70 ++----------------------- 3 files changed, 9 insertions(+), 73 deletions(-) diff --git a/starport/services/scaffolder/message.go b/starport/services/scaffolder/message.go index ab071429e4..10729b24e9 100644 --- a/starport/services/scaffolder/message.go +++ b/starport/services/scaffolder/message.go @@ -42,13 +42,13 @@ func (s *Scaffolder) AddMessage(moduleName string, msgName string, msgDesc strin return fmt.Errorf("%s can't be used as a type name", msgName) } - // Check msg is not already created - ok, err = isMsgCreated(s.path, moduleName, msgName) + // Check component name is not already used + ok, err = isComponentCreated(s.path, moduleName, msgName) if err != nil { return err } if ok { - return fmt.Errorf("%s message is already added", msgName) + return fmt.Errorf("%s component is already added", msgName) } // Parse provided fields diff --git a/starport/services/scaffolder/packet.go b/starport/services/scaffolder/packet.go index aca7a3cc70..01fb38bda7 100644 --- a/starport/services/scaffolder/packet.go +++ b/starport/services/scaffolder/packet.go @@ -54,13 +54,13 @@ func (s *Scaffolder) AddPacket(moduleName string, packetName string, packetField return fmt.Errorf("the module %s doesn't implement IBC module interface", moduleName) } - // Check packet doesn't exist - ok, err = isPacketCreated(s.path, moduleName, packetName) + // Check component name is not already used + ok, err = isComponentCreated(s.path, moduleName, packetName) if err != nil { return err } if ok { - return fmt.Errorf("the packet %s already exist", packetName) + return fmt.Errorf("the component %s already exist", packetName) } // Parse packet fields diff --git a/starport/services/scaffolder/type.go b/starport/services/scaffolder/type.go index e40d24e1c1..b63033f8a1 100644 --- a/starport/services/scaffolder/type.go +++ b/starport/services/scaffolder/type.go @@ -59,13 +59,13 @@ func (s *Scaffolder) AddType(addTypeOptions AddTypeOption, moduleName string, st return fmt.Errorf("%s can't be used as a type name", stype) } - // Check type is not already created - ok, err = isTypeCreated(s.path, moduleName, stype) + // Check component name is not already used + ok, err = isComponentCreated(s.path, moduleName, stype) if err != nil { return err } if ok { - return fmt.Errorf("%s type is already added", stype) + return fmt.Errorf("%s component is already added", stype) } // Parse provided field @@ -208,20 +208,6 @@ func isTypeCreated(appPath, moduleName, typeName string) (isCreated bool, err er return } -// isMsgServerDefined checks if the module uses the MsgServer convention for transactions -// this is checked by verifying the existence of the tx.proto file -func isMsgServerDefined(appPath, moduleName string) (bool, error) { - txProto, err := filepath.Abs(filepath.Join(appPath, "proto", moduleName, "tx.proto")) - if err != nil { - return false, err - } - - if _, err := os.Stat(txProto); os.IsNotExist(err) { - return false, nil - } - return true, err -} - // isForbiddenTypeField returns true if the name is forbidden as a field name func isForbiddenTypeField(name string) bool { switch name { @@ -234,53 +220,3 @@ func isForbiddenTypeField(name string) bool { return isGoReservedWord(name) } - -func isGoReservedWord(name string) bool { - // Check keyword or literal - if token.Lookup(name).IsKeyword() { - return true - } - - // Check with builtin identifier - switch name { - case - "panic", - "recover", - "append", - "bool", - "byte", - "cap", - "close", - "complex", - "complex64", - "complex128", - "uint16", - "copy", - "false", - "float32", - "float64", - "imag", - "int", - "int8", - "int16", - "uint32", - "int32", - "int64", - "iota", - "len", - "make", - "new", - "nil", - "uint64", - "print", - "println", - "real", - "string", - "true", - "uint", - "uint8", - "uintptr": - return true - } - return false -} From ecab8c5779050d19ec517e2f3653c502d47ab20c Mon Sep 17 00:00:00 2001 From: ltacker Date: Mon, 15 Mar 2021 10:51:21 +0100 Subject: [PATCH 3/3] Small fix --- starport/services/scaffolder/message.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/starport/services/scaffolder/message.go b/starport/services/scaffolder/message.go index dc6c126e64..2ac0e76429 100644 --- a/starport/services/scaffolder/message.go +++ b/starport/services/scaffolder/message.go @@ -39,7 +39,7 @@ func (s *Scaffolder) AddMessage(moduleName string, msgName string, msgDesc strin // Ensure the name is valid, otherwise it would generate an incorrect code if isForbiddenComponentName(msgName) { - return fmt.Errorf("%s can't be used as a packet name", msgName) + return fmt.Errorf("%s can't be used as a message name", msgName) } // Check component name is not already used @@ -124,7 +124,7 @@ func isMsgCreated(appPath, moduleName, msgName string) (isCreated bool, err erro _, err = os.Stat(absPath) if os.IsNotExist(err) { - // Packet doesn't exist + // Message doesn't exist return false, nil }