Основаны ли сборочные инструменты bazel на отдельных файлах starlark? - PullRequest
1 голос
/ 29 октября 2019

Я смотрю на репозиторий buildtools (https://github.com/bazelbuild/buildtools) и пытаюсь понять сферу его обязанностей, связанную с тремя фазами сборки bazel (загрузка, анализ, выполнение)

В описании репо говорится, что это A bazel BUILD file formatter and editor. Я нахожу много логики в репо, написанном на go-lang, который предоставляет полную поддержку синтаксического анализатора AST, возможности интерпретации синтаксиса starlark, переформатированиеи перезапись файлов BUILD, а что нет. По сути, есть логика, предназначенная для работы с одиночным файлом starlark за раз. Перечитывание этого описания репозитория в этом свете приводит меня к выводу, что buildtools - это действительно работа с одним файлом. и представляет инструменты, которые только по функциональности пересекаются (возможно, только частично) с теми операциями загрузки, которые bazel выполняет при сборке.

Вопрос : точно ли фокусируется на buildtoolsодин файл starlark?

Если это правда, то все , кратные Логика анализа файлов starlark и т. д., кажется, фактически поддерживается на уровне https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/google/devtools/build/lib, и я не должен ожидать, что в репо buildtools будут найдены какие-либо инструменты для фазы анализа и за ее пределами. Это правильно?

Ответы [ 2 ]

3 голосов
/ 29 октября 2019

Я не работаю над Buildtools, но мы согласны: кажется, что эти инструменты сосредоточены на файлах BUILD / .bzl в изоляции. Они позволяют вам обрабатывать эти файлы параллельно, чтобы выполнять с ними аналогичные операции.

Если вам интересно, понимают ли эти инструменты отношения между этими файлами, ответ, вероятно, будет «нет».

Если вы продолжитеИнтересно, что же тогда делают инструменты, ответом является запрос Базеля , запрос и aquery . Я не знаю программируемого API для этих запросов;Вы должны запустить Базеля, чтобы выполнить их.

1 голос
/ 05 ноября 2019

buildtools имеет инструменты, работающие на синтаксическом уровне (он смотрит на дерево синтаксиса). Эти инструменты находятся за пределами Bazel и не знают фаз сборки Bazel. В будущем мы можем расширить код для работы с несколькими файлами (для статического анализа), но он все равно будет независим от фаз Bazel.

https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/google/devtools/build/lib/ - исходный код Bazel. Каталог syntax/ содержит код для чтения и оценки файлов Starlark. Код там называется Skyframe. Skyframe вызывает переводчика много раз параллельно, как на этапе загрузки, так и на этапе анализа.

Если у вас есть более конкретный вопрос (что вы пытаетесь сделать?), Я могу помочь больше. :)

...