29 lines
740 B
Go
29 lines
740 B
Go
package transformers
|
|
|
|
import (
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ast"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/printer"
|
|
)
|
|
|
|
type modifierVisitor struct {
|
|
Transformer
|
|
AllowedModifiers ast.ModifierFlags
|
|
}
|
|
|
|
func (v *modifierVisitor) visit(node *ast.Node) *ast.Node {
|
|
flags := ast.ModifierToFlag(node.Kind)
|
|
if flags != ast.ModifierFlagsNone && flags&v.AllowedModifiers == 0 {
|
|
return nil
|
|
}
|
|
return node
|
|
}
|
|
|
|
func ExtractModifiers(emitContext *printer.EmitContext, modifiers *ast.ModifierList, allowed ast.ModifierFlags) *ast.ModifierList {
|
|
if modifiers == nil {
|
|
return nil
|
|
}
|
|
tx := modifierVisitor{AllowedModifiers: allowed}
|
|
tx.NewTransformer(tx.visit, emitContext)
|
|
return tx.visitor.VisitModifiers(modifiers)
|
|
}
|