Module mods

mods
Version:
0.0.1
License:
MIT
Dependencies from vmod:
2
Imports:
6
Imported by:
4
Repository:
OS-specific
Show selected OS-specific symbols.
Backend-specific
Show selected Backend-specific symbols.

Dependencies defined in v.mod

  • srackham.pcre2
  • markdown

Imports

Aliases

#type ModuleFqn

type ModuleFqn = string

ModuleFqn это алиас для строки, представляющей собой полное имя модуля.

For example:

 foo.bar.baz

Полное имя модуля не обязательно имеет в себе хотя бы одну точку, foo также является полным именем модуля.

Можно утверждать, что любое значение этого типа должно рассматриваться как полное имя модуля.

Constants

This section is empty.

Sum types

This section is empty.

Functions

#fn split_name

fn split_name(name string) (string, string)

split_name разделяет полное имя символа на имя модуля и имя символа.

Например, foo.bar.baz разделяется на foo.bar и baz.

#fn ([]ImportsResult) count_all

fn (i []ImportsResult) count_all() int

Structs

#struct Module

heap
pub struct Module {
pub:
	name string    // short name, like `foo`
	fqn  ModuleFqn // full name, like `foo.bar`

	description  string // README.md file contents
	license_path string // path to LICENSE file
	vmod         vmod.Manifest
pub mut:
	universe   &Universe = unsafe { nil } // universe которая содержит этот модуль
	parent     &Module   = unsafe { nil }
	submodules []&Module
	files      []&ast.File
	symbols    []symbols.NamedSymbol
}

Module представляет собой одиночный модуль V.

Модуль содержит в себе все символы определенные в нем.

Модуль также может содержать в себе другие модули.

Обратите внимание, что symbols хранит только символы, определенные непосредственно в этом модуле. Символы, определенные в дочерних модулях, не включаются в этот список.

Модуль также хранит свой родительский модуль. Если модуль не имеет родительского модуля, то поле parent будет nil.

#fn (&Module) str

fn (m &Module) str() string

#fn (&Module) find_symbol

fn (m &Module) find_symbol(name string) ?symbols.NamedSymbol

find_symbol ищет символ с указанным именем в модуле.

Если символ не найден, возвращается none.

#fn (&Module) find_type

fn (m &Module) find_type(name string) ?symbols.NamedSymbol

find_type ищет тип с указанным именем в модуле.

Если тип не найден, возвращается none.

#fn (&Module) count_symbols

fn (m &Module) count_symbols() int

count_symbols возвращает количество символов, определенных в модуле.

#fn (&Module) license

fn (m &Module) license() string

license возвращает лицензию модуля.

Если модуль не имеет лицензии, то возвращается лицензия родительского модуля.

Если и родительский модуль не имеет лицензии, то возвращается пустая строка.

#fn (&Module) author

fn (m &Module) author() string

author возвращает автора модуля.

Если модуль не имеет автора, то возвращается автор родительского модуля.

Если и родительский модуль не имеет автора, то возвращается пустая строка.

#fn (&Module) version

fn (m &Module) version() string

version возвращает версию модуля.

Если модуль не имеет версии, то возвращается версия родительского модуля.

Если и родительский модуль не имеет версии, то возвращается пустая строка.

#fn (&Module) repository_url

fn (m &Module) repository_url() string

repository_url возвращает URL репозитория модуля.

Если модуль не имеет URL репозитория, то возвращается URL репозитория родительского модуля.

Если и родительский модуль не имеет URL репозитория, то возвращается пустая строка.

#fn (&Module) dependencies

fn (m &Module) dependencies() ?[]string

dependencies возвращает список зависимостей модуля.

Если модуль не имеет зависимостей, то возвращается список зависимостей родительского модуля.

Если и родительский модуль не имеет зависимостей, то возвращается none.

Обратите внимание, что сам модуль может не использовать некоторые из зависимостей это поле возвращает зависимости модуля из файлов v.mod.

#fn (&Module) get_imports

fn (m &Module) get_imports() []string

get_imports возвращает список уникальных импортированных модулей во всех файлах модуля.

#fn (&Module) imports

fn (m &Module) imports(other Module) bool

imports проверяет импортирует ли данный модуль указанный модуль.

#struct Multiverse

heapnoinit
pub struct Multiverse {
pub:
	universes []&Universe
}

Multiverse описывает множество Universe для которых генерируется документация.

Если мы говорим о генерации документации только для одного проекта, то множество модулей в нем это Universe. Однако если мы говорим о генерации документации для нескольких проектов, то нам нужна абстракция для хранения нескольких Universe.

Нам необходимо иметь информация о всех проектах, чтобы уметь правильно резолвить ссылки на модули/символы или подсчитывать количество использований модулей.

#fn new_multiverse

fn new_multiverse(universes []&Universe) Multiverse

new_multiverse создает новый Multiverse из переданных Universe.

#fn (&Multiverse) find_module

fn (m &Multiverse) find_module(fqn ModuleFqn) ?&Module

find_module ищет модуль с указанным полным именем во всех universe.

#fn (&Multiverse) find_symbol

fn (m &Multiverse) find_symbol(name string) ?symbols.NamedSymbol

find_symbol ищет символ с указанным именем во всех universe.

Имя переданного символа должно быть полным, то есть содержать имя модуля.

Например, foo.bar.baz или foo.bar.baz().

Все до последней точки считается именем модуля, а все после – именем символа.

Если переданное имя не содержит точек, то поиск будет производиться в модуле builtin.

Если символ не найден, возвращается none.

#fn (&Multiverse) find_type

fn (m &Multiverse) find_type(name string) ?symbols.NamedSymbol

find_type ищет тип с указанным именем во всех universe.

See find_symbol for more details.

#fn (&Multiverse) get_imported_modules

fn (m &Multiverse) get_imported_modules(mod Module) []ImportsResult

get_imported_modules возвращает список модулей, которые импортирует указанный модуль.

#fn (&Multiverse) get_imported_by_modules

fn (m &Multiverse) get_imported_by_modules(mod Module) []ImportsResult

get_imported_by_modules возвращает список структур, каждая из которых описывает universe и список модулей, которые импортируют указанный модуль.

#fn (&Multiverse) get_stubs_universe

fn (m &Multiverse) get_stubs_universe() &Universe

#struct ImportsResult

pub struct ImportsResult {
pub mut:
	universe &Universe
	modules  []Module
}

#struct ResolverContext

pub struct ResolverContext {
pub:
	// when resolving symbols in comments
	current_symbol symbols.NamedSymbol
	// current module name
	current_module string
	// search only types
	search_only_types bool
}

ResolverContext содержит всю дополнительную информацию, которая может понадобиться при разрешении имен символов.

#struct Resolver

noinit
pub struct Resolver {
	ctx        ResolverContext
	multiverse &Multiverse
}

Resolver отвечает за разрешение имен символов в сигнатурах и комментариях.

Обратите внимание на ResolverContext.search_types, который позволяет искать только типы.

#fn new_resolver

fn new_resolver(multiverse &Multiverse, ctx ResolverContext) &Resolver

new_resolver создает новый экземпляр Resolver.

#fn (&Resolver) resolve

fn (r &Resolver) resolve(name_or_fqn string) ?symbols.NamedSymbol

resolve разрешает имя символа.

Данный метод может принимать как только имя символа, так и полное имя с модулем.

Если модуль не указан, то поиск будет вестись в текущем модуле, builtin модуле и в стабах.

Имя символа может содержать () в конце, они будут удалены перед поиском.

#fn (&Resolver) resolve_global

fn (r &Resolver) resolve_global(name string) ?symbols.NamedSymbol

#fn (&Resolver) resolve_local

fn (r &Resolver) resolve_local(module_name string, name string) ?symbols.NamedSymbol

resolve_local разрешает имя символа в указанном модуле.

#fn (&Resolver) resolve_from_stubs

fn (r &Resolver) resolve_from_stubs(name string) ?symbols.NamedSymbol

resolve_from_stubs разрешает имя символа в стабах.

#fn (&Resolver) normalize_name

fn (_ &Resolver) normalize_name(name string) string

normalize_name нормализует имя символа.

Например, убирает скобки из имени функции, так как часто пишут foo().

#fn (&Resolver) find

fn (r &Resolver) find(name string) ?symbols.NamedSymbol

#struct Universe

heapnoinit
pub struct Universe {
pub:
	name      string        // Имя universe.
	root      string        // Корневая директория, в которой находятся все модули.
	vmod      vmod.Manifest // Корневой манифест модуля.
	readme    string        // Корневой README.md файл.
	is_stdlib bool // Когда Universe описывает модули стандартной библиотеки.
pub mut:
	modules map[ModuleFqn]&Module
}

Universe представляет собой набор все модулей, для которых генерируется документация.

#fn new_universe

fn new_universe(name string, root string, is_stdlib bool, mut modules &map[string]&Module) &Universe

new_universe создает новый экземпляр Universe из переданных модулей.

#fn (&Universe) id

fn (u &Universe) id() string

id возвращает уникальный идентификатор universe.

#fn (&Universe) find_symbol

fn (u &Universe) find_symbol(name string) ?symbols.NamedSymbol

find_symbol ищет символ с указанным именем во всех модулях universe.

Имя переданного символа должно быть полным, то есть содержать имя модуля.

Например, foo.bar.baz или foo.bar.baz().

Все до последней точки считается именем модуля, а все после – именем символа.

Если переданное имя не содержит точек, то поиск будет производиться в модуле builtin.

Если символ не найден, возвращается none.

#fn (&Universe) find_type

fn (u &Universe) find_type(name string) ?symbols.NamedSymbol

find_type ищет тип с указанным именем во всех модулях universe.

See find_symbol for more details.

#fn (&Universe) find_methods

fn (u &Universe) find_methods(owner symbols.NamedSymbol) []symbols.Method

find_methods ищет методы, принадлежащие указанному типу.

#fn (&Universe) find_constructor

fn (u &Universe) find_constructor(owner symbols.Struct) &symbols.Function

find_constructor ищет конструктор для указанной структуры.

В V нет такого понятия как конструктор, однако часто для создания экземпляра структуры используется метод с префиксом new_.

Например, для структуры Foo конструктором будет метод new_foo.

Если конструктор не найден, возвращается none.

#fn (&Universe) is_constructor_of_structs

fn (_ &Universe) is_constructor_of_structs(fun symbols.NamedSymbol, structs []symbols.NamedSymbol) bool

is_constructor_of_structs проверяет, является ли указанная функция конструктором для хотя бы одной из указанных структур.

#fn (&Universe) find_module

fn (u &Universe) find_module(fqn ModuleFqn) ?&Module

find_module ищет модуль с указанным полным именем.

#fn (&Universe) count_symbols

fn (u &Universe) count_symbols() int

count_symbols возвращает общее количество символов во всех модулях universe.

#fn (&Universe) count_modules

fn (u &Universe) count_modules() int

count_modules возвращает количество модулей в universe.

#fn (&Universe) find_license

fn (u &Universe) find_license(mod Module) string

find_license возвращает лицензию модуля.

Сам модуль может содержать собственные v.mod файлы, которые могут содержать лицензию, поэтому они имеют приоритет.

Если модуль или его родительские модули не определяют лицензию, возвращается лицензия из корневого v.mod файла.

Если и в корневом v.mod файле лицензия не определена, возвращается пустая строка.

#fn (&Universe) find_version

fn (u &Universe) find_version(mod Module) string

find_version возвращает версию модуля.

Сам модуль может содержать собственные v.mod файлы, которые могут содержать версию, поэтому они имеют приоритет.

Если модуль или его родительские модули не определяют версию, возвращается версия из корневого v.mod файла.

Если и в корневом v.mod файле версия не определена, возвращается пустая строка.

#fn (&Universe) find_author

fn (u &Universe) find_author(mod Module) string

find_author возвращает автора модуля.

Сам модуль может содержать собственные v.mod файлы, которые могут содержать автора, поэтому они имеют приоритет.

Если модуль или его родительские модули не определяют автора, возвращается версия из корневого v.mod файла.

Если и в корневом v.mod файле автор не определен, возвращается пустая строка.

#fn (&Universe) find_dependencies

fn (u &Universe) find_dependencies(mod Module) []string

find_dependencies возвращает зависимости модуля.

Сам модуль может содержать собственные v.mod файлы, которые могут содержать зависимости, поэтому они имеют приоритет.

Если модуль или его родительские модули не определяют зависимости, возвращаются зависимости из корневого v.mod файла.

Если и в корневом v.mod файле зависимости не определены, возвращается пустой массив.

#fn (&Universe) find_repository_url

fn (u &Universe) find_repository_url(mod Module) string

find_repository_url возвращает URL репозитория модуля.

Сам модуль может содержать собственные v.mod файлы, которые могут содержать URL репозитория, поэтому они имеют приоритет.

Если модуль или его родительские модули не определяют URL репозитория, возвращается URL репозитория из корневого v.mod файла.

Если и в корневом v.mod файле URL репозитория не определен, возвращается пустая строка.

Interfaces

This section is empty.

Enums

This section is empty.