# ast
--
    import "github.com/robertkrimen/otto/ast"

Package ast declares types representing a JavaScript AST.


### Warning

The parser and AST interfaces are still works-in-progress (particularly where
node types are concerned) and may change in the future.

## Usage

#### type ArrayLiteral

```go
type ArrayLiteral struct {
	LeftBracket  file.Idx
	RightBracket file.Idx
	Value        []Expression
}
```


#### func (*ArrayLiteral) Idx0

```go
func (self *ArrayLiteral) Idx0() file.Idx
```

#### func (*ArrayLiteral) Idx1

```go
func (self *ArrayLiteral) Idx1() file.Idx
```

#### type AssignExpression

```go
type AssignExpression struct {
	Operator token.Token
	Left     Expression
	Right    Expression
}
```


#### func (*AssignExpression) Idx0

```go
func (self *AssignExpression) Idx0() file.Idx
```

#### func (*AssignExpression) Idx1

```go
func (self *AssignExpression) Idx1() file.Idx
```

#### type BadExpression

```go
type BadExpression struct {
	From file.Idx
	To   file.Idx
}
```


#### func (*BadExpression) Idx0

```go
func (self *BadExpression) Idx0() file.Idx
```

#### func (*BadExpression) Idx1

```go
func (self *BadExpression) Idx1() file.Idx
```

#### type BadStatement

```go
type BadStatement struct {
	From file.Idx
	To   file.Idx
}
```


#### func (*BadStatement) Idx0

```go
func (self *BadStatement) Idx0() file.Idx
```

#### func (*BadStatement) Idx1

```go
func (self *BadStatement) Idx1() file.Idx
```

#### type BinaryExpression

```go
type BinaryExpression struct {
	Operator   token.Token
	Left       Expression
	Right      Expression
	Comparison bool
}
```


#### func (*BinaryExpression) Idx0

```go
func (self *BinaryExpression) Idx0() file.Idx
```

#### func (*BinaryExpression) Idx1

```go
func (self *BinaryExpression) Idx1() file.Idx
```

#### type BlockStatement

```go
type BlockStatement struct {
	LeftBrace  file.Idx
	List       []Statement
	RightBrace file.Idx
}
```


#### func (*BlockStatement) Idx0

```go
func (self *BlockStatement) Idx0() file.Idx
```

#### func (*BlockStatement) Idx1

```go
func (self *BlockStatement) Idx1() file.Idx
```

#### type BooleanLiteral

```go
type BooleanLiteral struct {
	Idx     file.Idx
	Literal string
	Value   bool
}
```


#### func (*BooleanLiteral) Idx0

```go
func (self *BooleanLiteral) Idx0() file.Idx
```

#### func (*BooleanLiteral) Idx1

```go
func (self *BooleanLiteral) Idx1() file.Idx
```

#### type BracketExpression

```go
type BracketExpression struct {
	Left         Expression
	Member       Expression
	LeftBracket  file.Idx
	RightBracket file.Idx
}
```


#### func (*BracketExpression) Idx0

```go
func (self *BracketExpression) Idx0() file.Idx
```

#### func (*BracketExpression) Idx1

```go
func (self *BracketExpression) Idx1() file.Idx
```

#### type BranchStatement

```go
type BranchStatement struct {
	Idx   file.Idx
	Token token.Token
	Label *Identifier
}
```


#### func (*BranchStatement) Idx0

```go
func (self *BranchStatement) Idx0() file.Idx
```

#### func (*BranchStatement) Idx1

```go
func (self *BranchStatement) Idx1() file.Idx
```

#### type CallExpression

```go
type CallExpression struct {
	Callee           Expression
	LeftParenthesis  file.Idx
	ArgumentList     []Expression
	RightParenthesis file.Idx
}
```


#### func (*CallExpression) Idx0

```go
func (self *CallExpression) Idx0() file.Idx
```

#### func (*CallExpression) Idx1

```go
func (self *CallExpression) Idx1() file.Idx
```

#### type CaseStatement

```go
type CaseStatement struct {
	Case       file.Idx
	Test       Expression
	Consequent []Statement
}
```


#### func (*CaseStatement) Idx0

```go
func (self *CaseStatement) Idx0() file.Idx
```

#### func (*CaseStatement) Idx1

```go
func (self *CaseStatement) Idx1() file.Idx
```

#### type CatchStatement

```go
type CatchStatement struct {
	Catch     file.Idx
	Parameter *Identifier
	Body      Statement
}
```


#### func (*CatchStatement) Idx0

```go
func (self *CatchStatement) Idx0() file.Idx
```

#### func (*CatchStatement) Idx1

```go
func (self *CatchStatement) Idx1() file.Idx
```

#### type ConditionalExpression

```go
type ConditionalExpression struct {
	Test       Expression
	Consequent Expression
	Alternate  Expression
}
```


#### func (*ConditionalExpression) Idx0

```go
func (self *ConditionalExpression) Idx0() file.Idx
```

#### func (*ConditionalExpression) Idx1

```go
func (self *ConditionalExpression) Idx1() file.Idx
```

#### type DebuggerStatement

```go
type DebuggerStatement struct {
	Debugger file.Idx
}
```


#### func (*DebuggerStatement) Idx0

```go
func (self *DebuggerStatement) Idx0() file.Idx
```

#### func (*DebuggerStatement) Idx1

```go
func (self *DebuggerStatement) Idx1() file.Idx
```

#### type Declaration

```go
type Declaration interface {
	// contains filtered or unexported methods
}
```

All declaration nodes implement the Declaration interface.

#### type DoWhileStatement

```go
type DoWhileStatement struct {
	Do   file.Idx
	Test Expression
	Body Statement
}
```


#### func (*DoWhileStatement) Idx0

```go
func (self *DoWhileStatement) Idx0() file.Idx
```

#### func (*DoWhileStatement) Idx1

```go
func (self *DoWhileStatement) Idx1() file.Idx
```

#### type DotExpression

```go
type DotExpression struct {
	Left       Expression
	Identifier Identifier
}
```


#### func (*DotExpression) Idx0

```go
func (self *DotExpression) Idx0() file.Idx
```

#### func (*DotExpression) Idx1

```go
func (self *DotExpression) Idx1() file.Idx
```

#### type EmptyStatement

```go
type EmptyStatement struct {
	Semicolon file.Idx
}
```


#### func (*EmptyStatement) Idx0

```go
func (self *EmptyStatement) Idx0() file.Idx
```

#### func (*EmptyStatement) Idx1

```go
func (self *EmptyStatement) Idx1() file.Idx
```

#### type Expression

```go
type Expression interface {
	Node
	// contains filtered or unexported methods
}
```

All expression nodes implement the Expression interface.

#### type ExpressionStatement

```go
type ExpressionStatement struct {
	Expression Expression
}
```


#### func (*ExpressionStatement) Idx0

```go
func (self *ExpressionStatement) Idx0() file.Idx
```

#### func (*ExpressionStatement) Idx1

```go
func (self *ExpressionStatement) Idx1() file.Idx
```

#### type ForInStatement

```go
type ForInStatement struct {
	For    file.Idx
	Into   Expression
	Source Expression
	Body   Statement
}
```


#### func (*ForInStatement) Idx0

```go
func (self *ForInStatement) Idx0() file.Idx
```

#### func (*ForInStatement) Idx1

```go
func (self *ForInStatement) Idx1() file.Idx
```

#### type ForStatement

```go
type ForStatement struct {
	For         file.Idx
	Initializer Expression
	Update      Expression
	Test        Expression
	Body        Statement
}
```


#### func (*ForStatement) Idx0

```go
func (self *ForStatement) Idx0() file.Idx
```

#### func (*ForStatement) Idx1

```go
func (self *ForStatement) Idx1() file.Idx
```

#### type FunctionDeclaration

```go
type FunctionDeclaration struct {
	Function *FunctionLiteral
}
```


#### type FunctionLiteral

```go
type FunctionLiteral struct {
	Function      file.Idx
	Name          *Identifier
	ParameterList *ParameterList
	Body          Statement
	Source        string

	DeclarationList []Declaration
}
```


#### func (*FunctionLiteral) Idx0

```go
func (self *FunctionLiteral) Idx0() file.Idx
```

#### func (*FunctionLiteral) Idx1

```go
func (self *FunctionLiteral) Idx1() file.Idx
```

#### type Identifier

```go
type Identifier struct {
	Name string
	Idx  file.Idx
}
```


#### func (*Identifier) Idx0

```go
func (self *Identifier) Idx0() file.Idx
```

#### func (*Identifier) Idx1

```go
func (self *Identifier) Idx1() file.Idx
```

#### type IfStatement

```go
type IfStatement struct {
	If         file.Idx
	Test       Expression
	Consequent Statement
	Alternate  Statement
}
```


#### func (*IfStatement) Idx0

```go
func (self *IfStatement) Idx0() file.Idx
```

#### func (*IfStatement) Idx1

```go
func (self *IfStatement) Idx1() file.Idx
```

#### type LabelledStatement

```go
type LabelledStatement struct {
	Label     *Identifier
	Colon     file.Idx
	Statement Statement
}
```


#### func (*LabelledStatement) Idx0

```go
func (self *LabelledStatement) Idx0() file.Idx
```

#### func (*LabelledStatement) Idx1

```go
func (self *LabelledStatement) Idx1() file.Idx
```

#### type NewExpression

```go
type NewExpression struct {
	New              file.Idx
	Callee           Expression
	LeftParenthesis  file.Idx
	ArgumentList     []Expression
	RightParenthesis file.Idx
}
```


#### func (*NewExpression) Idx0

```go
func (self *NewExpression) Idx0() file.Idx
```

#### func (*NewExpression) Idx1

```go
func (self *NewExpression) Idx1() file.Idx
```

#### type Node

```go
type Node interface {
	Idx0() file.Idx // The index of the first character belonging to the node
	Idx1() file.Idx // The index of the first character immediately after the node
}
```

All nodes implement the Node interface.

#### type NullLiteral

```go
type NullLiteral struct {
	Idx     file.Idx
	Literal string
}
```


#### func (*NullLiteral) Idx0

```go
func (self *NullLiteral) Idx0() file.Idx
```

#### func (*NullLiteral) Idx1

```go
func (self *NullLiteral) Idx1() file.Idx
```

#### type NumberLiteral

```go
type NumberLiteral struct {
	Idx     file.Idx
	Literal string
	Value   interface{}
}
```


#### func (*NumberLiteral) Idx0

```go
func (self *NumberLiteral) Idx0() file.Idx
```

#### func (*NumberLiteral) Idx1

```go
func (self *NumberLiteral) Idx1() file.Idx
```

#### type ObjectLiteral

```go
type ObjectLiteral struct {
	LeftBrace  file.Idx
	RightBrace file.Idx
	Value      []Property
}
```


#### func (*ObjectLiteral) Idx0

```go
func (self *ObjectLiteral) Idx0() file.Idx
```

#### func (*ObjectLiteral) Idx1

```go
func (self *ObjectLiteral) Idx1() file.Idx
```

#### type ParameterList

```go
type ParameterList struct {
	Opening file.Idx
	List    []*Identifier
	Closing file.Idx
}
```


#### type Program

```go
type Program struct {
	Body []Statement

	DeclarationList []Declaration

	File *file.File
}
```


#### func (*Program) Idx0

```go
func (self *Program) Idx0() file.Idx
```

#### func (*Program) Idx1

```go
func (self *Program) Idx1() file.Idx
```

#### type Property

```go
type Property struct {
	Key   string
	Kind  string
	Value Expression
}
```


#### type RegExpLiteral

```go
type RegExpLiteral struct {
	Idx     file.Idx
	Literal string
	Pattern string
	Flags   string
	Value   string
}
```


#### func (*RegExpLiteral) Idx0

```go
func (self *RegExpLiteral) Idx0() file.Idx
```

#### func (*RegExpLiteral) Idx1

```go
func (self *RegExpLiteral) Idx1() file.Idx
```

#### type ReturnStatement

```go
type ReturnStatement struct {
	Return   file.Idx
	Argument Expression
}
```


#### func (*ReturnStatement) Idx0

```go
func (self *ReturnStatement) Idx0() file.Idx
```

#### func (*ReturnStatement) Idx1

```go
func (self *ReturnStatement) Idx1() file.Idx
```

#### type SequenceExpression

```go
type SequenceExpression struct {
	Sequence []Expression
}
```


#### func (*SequenceExpression) Idx0

```go
func (self *SequenceExpression) Idx0() file.Idx
```

#### func (*SequenceExpression) Idx1

```go
func (self *SequenceExpression) Idx1() file.Idx
```

#### type Statement

```go
type Statement interface {
	Node
	// contains filtered or unexported methods
}
```

All statement nodes implement the Statement interface.

#### type StringLiteral

```go
type StringLiteral struct {
	Idx     file.Idx
	Literal string
	Value   string
}
```


#### func (*StringLiteral) Idx0

```go
func (self *StringLiteral) Idx0() file.Idx
```

#### func (*StringLiteral) Idx1

```go
func (self *StringLiteral) Idx1() file.Idx
```

#### type SwitchStatement

```go
type SwitchStatement struct {
	Switch       file.Idx
	Discriminant Expression
	Default      int
	Body         []*CaseStatement
}
```


#### func (*SwitchStatement) Idx0

```go
func (self *SwitchStatement) Idx0() file.Idx
```

#### func (*SwitchStatement) Idx1

```go
func (self *SwitchStatement) Idx1() file.Idx
```

#### type ThisExpression

```go
type ThisExpression struct {
	Idx file.Idx
}
```


#### func (*ThisExpression) Idx0

```go
func (self *ThisExpression) Idx0() file.Idx
```

#### func (*ThisExpression) Idx1

```go
func (self *ThisExpression) Idx1() file.Idx
```

#### type ThrowStatement

```go
type ThrowStatement struct {
	Throw    file.Idx
	Argument Expression
}
```


#### func (*ThrowStatement) Idx0

```go
func (self *ThrowStatement) Idx0() file.Idx
```

#### func (*ThrowStatement) Idx1

```go
func (self *ThrowStatement) Idx1() file.Idx
```

#### type TryStatement

```go
type TryStatement struct {
	Try     file.Idx
	Body    Statement
	Catch   *CatchStatement
	Finally Statement
}
```


#### func (*TryStatement) Idx0

```go
func (self *TryStatement) Idx0() file.Idx
```

#### func (*TryStatement) Idx1

```go
func (self *TryStatement) Idx1() file.Idx
```

#### type UnaryExpression

```go
type UnaryExpression struct {
	Operator token.Token
	Idx      file.Idx // If a prefix operation
	Operand  Expression
	Postfix  bool
}
```


#### func (*UnaryExpression) Idx0

```go
func (self *UnaryExpression) Idx0() file.Idx
```

#### func (*UnaryExpression) Idx1

```go
func (self *UnaryExpression) Idx1() file.Idx
```

#### type VariableDeclaration

```go
type VariableDeclaration struct {
	Var  file.Idx
	List []*VariableExpression
}
```


#### type VariableExpression

```go
type VariableExpression struct {
	Name        string
	Idx         file.Idx
	Initializer Expression
}
```


#### func (*VariableExpression) Idx0

```go
func (self *VariableExpression) Idx0() file.Idx
```

#### func (*VariableExpression) Idx1

```go
func (self *VariableExpression) Idx1() file.Idx
```

#### type VariableStatement

```go
type VariableStatement struct {
	Var  file.Idx
	List []Expression
}
```


#### func (*VariableStatement) Idx0

```go
func (self *VariableStatement) Idx0() file.Idx
```

#### func (*VariableStatement) Idx1

```go
func (self *VariableStatement) Idx1() file.Idx
```

#### type WhileStatement

```go
type WhileStatement struct {
	While file.Idx
	Test  Expression
	Body  Statement
}
```


#### func (*WhileStatement) Idx0

```go
func (self *WhileStatement) Idx0() file.Idx
```

#### func (*WhileStatement) Idx1

```go
func (self *WhileStatement) Idx1() file.Idx
```

#### type WithStatement

```go
type WithStatement struct {
	With   file.Idx
	Object Expression
	Body   Statement
}
```


#### func (*WithStatement) Idx0

```go
func (self *WithStatement) Idx0() file.Idx
```

#### func (*WithStatement) Idx1

```go
func (self *WithStatement) Idx1() file.Idx
```

--
**godocdown** http://github.com/robertkrimen/godocdown