protoast

package module
v0.30.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2022 License: MIT Imports: 15 Imported by: 1

README

ProtoAST

A library to represent protobuf services definitions shaped into ASTes.

Usage

mapping := map[string]string{
	"file.proto": "/var/lib/protofiles/file.proto",
}
files := protoast.NewFiles(mapping)
ns := protoast.NewBuilder(files, func(err error) {
	log.Println(err)
})

// retrieves AST for file.proto
file, err := ns.AST("file.proto")
if err != nil {
	log.Fatal(err)
}

// output AST of the first service defined in file.proto
log.Printf("%#v", file.Services[0])

// returns comment for the first service in a file
log.Printf("%#v", ns.Comment(file.Services[0])) 

// returns position of the second service's name
log.Printf("%#v", ns.Position(file.Service[1], &file.Service[1].Name))

You can also use protoast.NewFilesViaResolver constructor to use a callback function instead of map[string]string to resolve import names.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func StringRef

func StringRef(value string) *string

StringRef создаёт ссылку на строку

Types

type Builder

type Builder struct {
	// contains filtered or unexported fields
}

Builder построитель структурированной информации

func NewBuilder

func NewBuilder(imports Files, errProcessing func(error)) *Builder

NewBuilder конструктор построителя AST-представления

func (*Builder) AST

func (s *Builder) AST(importPath string) (*ast.File, error)

AST представление для файла с данным относительным путём

func (*Builder) Comment

func (s *Builder) Comment(k ast.Unique) *ast.Comment

Comment возвращает комментарий для сущности реализующей Unique

func (*Builder) CommentField

func (s *Builder) CommentField(k ast.Unique, fieldAddr interface{}) *ast.Comment

CommentField возвращает комментарий для поля сущности реализующей Unique

func (*Builder) Namespace

func (s *Builder) Namespace(importPath string) (Namespace, error)

Namespace получение пространства имён для данного файла

func (*Builder) Package

func (s *Builder) Package(dir string) (*ast.Package, error)

Package отдать все файлы пакета для proto-файлов из данной директории. Будет работать только для резолвера-функции. Если в директории нет файлов то будет возвращена ошибка ast.ErrorPackageMissingFiles

func (*Builder) Position

func (s *Builder) Position(k ast.Unique) scanner.Position

Position возвращает позицию данного Unique

func (*Builder) PositionField

func (s *Builder) PositionField(k ast.Unique, fieldAddr interface{}) scanner.Position

PositionField возвращает позицию данного для поля данного Uniq

func (*Builder) Proto

func (s *Builder) Proto(importPath string) (*proto.Proto, error)

Proto представление для прохода визиторами из github.com/emicklei/proto

func (*Builder) SameDirProtos deprecated

func (s *Builder) SameDirProtos(file *ast.File) ([]*ast.File, error)

SameDirProtos Отдать список все файлы из директории содержащей указанный файл, включая данный.

Deprecated: лучше использовать SamePackage

func (*Builder) SamePackage

func (s *Builder) SamePackage(file *ast.File) (*ast.Package, error)

SamePackage отдать все файлы пакета для данного файла

func (*Builder) Scope

func (s *Builder) Scope(access string) Namespace

Scope пространство имён для данной области видимости

type Files

type Files interface {
	File(name string) ([]byte, error)
	Abs(name string) (string, error)
}

Files абстракция для работы с файлами

func NewFiles deprecated

func NewFiles(mapping map[string]string) Files

NewFiles отдаёт реализацию Files построенную на готовом соответствии

Deprecated: сущность имеет малый смысл, только хорошее название забрала

func NewFilesViaResolver

func NewFilesViaResolver(resolver func(string) (string, error)) Files

NewFilesViaResolver отдаёт реализацию Files опирающуюся на функцию-резолвер

type Namespace

type Namespace interface {
	GetType(name string) ast.Type
	GetService(name string) *ast.Service
}

Directories

Path Synopsis
ast
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL