Arrow R 包使用了一些额外的开发工具
-
lintr
用于代码分析 -
styler
用于代码风格化 -
pkgdown
用于构建网站 -
roxygen2
用于文档化包- R 文档使用了
roxygen2
版本 7.1.2 中引入的@examplesIf
标签
- R 文档使用了
您可以通过运行以下命令安装所有这些额外的依赖项
install.packages(c("lintr", "styler", "pkgdown", "roxygen2"))
arrow/r
目录包含一个 Makefile
,以帮助从命令行执行一些常见任务(例如 make test
、make doc
、make clean
等)。
重新构建文档
R 文档使用了 roxygen2 版本 7.1.2 中引入的 @examplesIf
标签。
remotes::install_github("r-lib/roxygen2")
您可以使用 devtools::document()
和 pkgdown::build_site()
重新构建文档并预览结果。
# Update roxygen documentation
devtools::document()
# To preview the documentation website
pkgdown::build_site(preview=TRUE)
风格化和 Linting
R 代码
包中的 R 代码遵循 tidyverse 风格。在 PR 提交(以及推送时),我们的 CI 将运行 linting,并在 pull request 上使用注释标记可能的错误。
要在本地运行 linter,请安装 lintr 包(注意,我们目前使用一个包含尚未被上游接受的修复的分支,请参阅文件 ci/docker/linux-apt-lint.dockerfile
中 lintr 的安装方式以了解当前状态),然后运行
lintr::lint_package("arrow/r")
您可以使用 styler 包自动更改包中代码的格式。有两种方法可以做到这一点
在 PR 上使用命令
@github-actions autotune
来让评论机器人自动执行此操作,并将其提交回分支。通过 Makefile 命令在本地运行 styler
make style # (for only the files changed)
make style-all # (for all files)
或在 R 中运行
# note the file that should not be styled
styler::style_pkg(exclude_files = c("data-raw/codegen.R"))
styler 包将修复许多样式错误,但并非所有 lintr 错误都可以使用 styler 自动修复。我们有意不进行样式化的文件列表位于 r/.styler_excludes.R
中。
C++ 代码
arrow 包在 cpp11 之上使用了一些自定义工具,以准备其 src/
中的 C++ 代码。这是因为在构建时,只有一些功能会被有条件地启用和构建。如果您更改 R 包中的 C++ 代码,您需要将 ARROW_R_DEV
环境变量设置为 true
(可选地,将其添加到您的 ~/.Renviron
文件中,以便在会话之间保持不变),以便 data-raw/codegen.R
文件用于代码生成。Makefile
命令也会自动处理此问题。
我们在 C++ 代码中使用 Google C++ 风格。实现此目的的最简单方法是使用编辑器/IDE 为您格式化代码。许多流行的编辑器/IDE 都支持在保存 C++ 文件时运行 clang-format
。安装/启用适当的插件可以避免很多麻烦。
使用以下命令检查样式错误
./lint.sh
在提交之前使用以下命令修复任何样式问题
./lint.sh --fix
lint 脚本需要 Python 3 和 clang-format
。如果找不到该命令,您可以显式提供其路径,例如
CLANG_FORMAT=/opt/llvm/bin/clang-format ./lint.sh
您可以通过以下命令查看所需的 clang-format
版本
(. ../.env && echo ${CLANG_TOOLS})
注意,lint 脚本需要 Python 3 和 Python 依赖项(注意 `cmake_format 被固定到特定版本)
- autopep8
- flake8
- cmake_format==0.5.2
运行测试
可以使用 devtools::test()
或 Makefile 替代方案来运行测试。
# Run the test suite, optionally filtering file names
devtools::test(filter="^regexp$")
# or the Makefile alternative from the arrow/r directory in a shell:
make test file=regexp
某些测试会根据包构建中某些功能的可用性(S3 支持、压缩库等)有条件地启用。其他测试通常默认跳过,但可以使用环境变量或其他设置启用
如果该包在没有 C++ libarrow 的情况下构建,则所有测试都会在 Linux 上跳过。如果 libarrow 不可用时构建失败(例如,测试 C++ 构建是否成功),请设置
TEST_R_WITH_ARROW=true
除非
ARROW_R_DEV=true
,否则某些测试会被禁用除非
ARROW_LARGE_MEMORY_TESTS=true
,否则需要分配 >2GB 内存来测试 Large 类型的测试会被禁用除非在
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
中设置凭据,否则针对真实 S3 存储桶的集成测试将被禁用;这些凭据可根据要求提供如果找到
minio server
进程正在运行,则会启用在本地使用 MinIO 的 S3 测试。如果您使用自定义设置运行 MinIO,您可以设置MINIO_ACCESS_KEY
、MINIO_SECRET_KEY
和MINIO_PORT
以覆盖默认值。
运行检查
您可以使用 devtools::check()
运行包检查,并使用 covr::package_coverage()
检查测试覆盖率。
# All package checks
devtools::check()
# See test coverage statistics
covr::report()
covr::package_coverage()
对于完整的包验证,您可以从终端运行以下命令。
R CMD build .
R CMD check arrow_*.tar.gz --as-cran
运行扩展的 CI 检查
在 pull request 上,您可以通过评论 PR 来触发一些操作。这些扩展的 CI 检查每晚运行,也可以使用称为 crossbow 的内部工具按需请求。下面显示了一些重要的 GitHub 评论命令。
运行特定任务
@github-actions crossbow submit {task-name}
有关与下面 tasks:
列表中的项目名称匹配的 glob 表达式模式列表,请参阅 crossbow 配置 开头附近的 r:
组定义。