Documentation
¶
Overview ¶
Package solgo provides a suite of tools for parsing, analyzing, and interacting with Solidity contracts. It includes a contextual parser that maintains a stack of contexts as it parses a contract, allowing it to keep track of the current context (e.g., within a contract definition, function definition, etc.). It also includes a contract listener that extracts information about contracts as they are parsed, including the contract name, implemented interfaces, imported contracts, pragmas, and comments. Additionally, it includes a syntax error listener that listens for syntax errors in contracts and categorizes them by severity. The package also provides functionality for generating and working with Ethereum contract ABIs (Application Binary Interfaces). This includes parsing contract definitions to extract ABI information, normalizing type names, and handling complex types like mappings. These tools can be used together to provide a comprehensive interface for working with Solidity contracts, making it easier to understand their structure, identify potential issues, and interact with them on the Ethereum network.
Index ¶
- type ContextualSolidityParser
- type ListenerName
- type SeverityLevel
- type SolGo
- func (s *SolGo) GetAllListeners() map[ListenerName]antlr.ParseTreeListener
- func (s *SolGo) GetInput() io.Reader
- func (s *SolGo) GetInputStream() *antlr.InputStream
- func (s *SolGo) GetLexer() *parser.SolidityLexer
- func (s *SolGo) GetListener(name ListenerName) (antlr.ParseTreeListener, error)
- func (s *SolGo) GetParser() *parser.SolidityParser
- func (s *SolGo) GetTokenStream() *antlr.CommonTokenStream
- func (s *SolGo) GetTree() antlr.ParseTree
- func (s *SolGo) IsListenerRegistered(name ListenerName) bool
- func (s *SolGo) Parse() []SyntaxError
- func (s *SolGo) RegisterListener(name ListenerName, listener antlr.ParseTreeListener) error
- type SyntaxError
- type SyntaxErrorListener
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ContextualSolidityParser ¶
type ContextualSolidityParser struct {
*parser.SolidityParser // SolidityParser is the base parser from the Solidity parser.
// contains filtered or unexported fields
}
ContextualSolidityParser is a wrapper around the SolidityParser that maintains a stack of contexts. This allows the parser to keep track of the current context (e.g., within a contract definition, function definition, etc.) as it parses a Solidity contract.
func (*ContextualSolidityParser) ContractDefinition ¶
func (p *ContextualSolidityParser) ContractDefinition() parser.IContractDefinitionContext
ContractDefinition is called when the parser enters a contract definition. It pushes "ContractDefinition" onto the context stack, calls the original ContractDefinition method, and then pops the context from the stack before returning.
func (*ContextualSolidityParser) CurrentContext ¶
func (p *ContextualSolidityParser) CurrentContext() string
CurrentContext returns the current context, i.e., the context at the top of the stack. If the stack is empty, it returns an empty string.
func (*ContextualSolidityParser) PopContext ¶
func (p *ContextualSolidityParser) PopContext()
PopContext pops the current context from the context stack. This should be called when the parser exits a rule.
func (*ContextualSolidityParser) PushContext ¶
func (p *ContextualSolidityParser) PushContext(context string)
PushContext pushes a new context onto the context stack. This should be called when the parser enters a new rule.
type ListenerName ¶
type ListenerName string
ListenerName represents the name of a listener.
const ( ListenerAbi ListenerName = "abi" ListenerContractInfo ListenerName = "contract_info" ListenerAst ListenerName = "ast" )
Predefined listener names.
type SeverityLevel ¶
type SeverityLevel int
SeverityLevel represents the severity of a syntax error.
const ( // SeverityHigh represents a high severity error. SeverityHigh SeverityLevel = iota // SeverityMedium represents a medium severity error. SeverityMedium // SeverityLow represents a low severity error. SeverityLow )
type SolGo ¶
type SolGo struct {
// contains filtered or unexported fields
}
SolGo is a struct that encapsulates the functionality for parsing and analyzing Solidity contracts.
func New ¶
New creates a new instance of SolGo. It takes a context and an io.Reader from which the Solidity contract is read. It initializes an input stream, lexer, token stream, and parser, and sets up error listeners.
func (*SolGo) GetAllListeners ¶
func (s *SolGo) GetAllListeners() map[ListenerName]antlr.ParseTreeListener
func (*SolGo) GetInput ¶
GetInput returns the raw input reader from which the Solidity contract is read.
func (*SolGo) GetInputStream ¶
func (s *SolGo) GetInputStream() *antlr.InputStream
GetInputStream returns the ANTLR input stream which is used by the lexer.
func (*SolGo) GetLexer ¶
func (s *SolGo) GetLexer() *parser.SolidityLexer
GetLexer returns the Solidity lexer which tokenizes the input stream.
func (*SolGo) GetListener ¶
func (s *SolGo) GetListener(name ListenerName) (antlr.ParseTreeListener, error)
func (*SolGo) GetParser ¶
func (s *SolGo) GetParser() *parser.SolidityParser
GetParser returns the Solidity parser which parses the token stream.
func (*SolGo) GetTokenStream ¶
func (s *SolGo) GetTokenStream() *antlr.CommonTokenStream
GetTokenStream returns the stream of tokens produced by the lexer.
func (*SolGo) GetTree ¶
GetTree returns the root of the parse tree that results from parsing the Solidity contract.
func (*SolGo) IsListenerRegistered ¶
func (s *SolGo) IsListenerRegistered(name ListenerName) bool
func (*SolGo) Parse ¶
func (s *SolGo) Parse() []SyntaxError
Parse initiates the parsing process. It walks the parse tree with all registered listeners and returns any syntax errors that were encountered during parsing.
func (*SolGo) RegisterListener ¶
func (s *SolGo) RegisterListener(name ListenerName, listener antlr.ParseTreeListener) error
type SyntaxError ¶
type SyntaxError struct {
// Line is the line number where the error occurred.
Line int
// Column is the column number where the error occurred.
Column int
// Message is the error message.
Message string
// Severity is the severity level of the error.
Severity SeverityLevel
// Context is the context in which the error occurred.
Context string
}
SyntaxError represents a syntax error in a Solidity contract.
type SyntaxErrorListener ¶
type SyntaxErrorListener struct {
// DefaultErrorListener is the base error listener from the ANTLR4 parser.
*antlr.DefaultErrorListener
// Errors is a slice of SyntaxErrors.
Errors []SyntaxError
}
SyntaxErrorListener is a listener for syntax errors in Solidity contracts. It extends the DefaultErrorListener from the ANTLR4 parser.
func NewSyntaxErrorListener ¶
func NewSyntaxErrorListener() *SyntaxErrorListener
NewSyntaxErrorListener creates a new SyntaxErrorListener.
func (*SyntaxErrorListener) SyntaxError ¶
func (s *SyntaxErrorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, column int, msg string, e antlr.RecognitionException)
SyntaxError is called when a syntax error is encountered. It creates a SyntaxError with the line number, column number, error message, severity level, and context, and adds it to the Errors slice.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package abis provides functionality for parsing and manipulating Solidity contract ABIs (Application Binary Interfaces).
|
Package abis provides functionality for parsing and manipulating Solidity contract ABIs (Application Binary Interfaces). |
|
Package contracts provides a set of utilities and listeners for working with Solidity contracts.
|
Package contracts provides a set of utilities and listeners for working with Solidity contracts. |