Arrow R 套件使用數個額外的開發工具
-
lintr
用於程式碼分析 -
styler
用於程式碼樣式設定 -
pkgdown
用於建立網站 -
roxygen2
用於文件化套件- R 文件使用
@examplesIf
標籤,此標籤在roxygen2
7.1.2 版中引入
- R 文件使用
您可以執行以下命令來安裝所有這些額外的相依性
install.packages(c("lintr", "styler", "pkgdown", "roxygen2"))
arrow/r
目錄包含一個 Makefile
,以協助從命令列執行一些常見任務 (例如,make test
、make doc
、make clean
等)。
重新建置文件
R 文件使用 @examplesIf
標籤,此標籤在 roxygen2 7.1.2 版中引入。
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)
樣式設定與程式碼檢查
R 程式碼
套件中的 R 程式碼遵循 tidyverse 風格。在 PR 提交時 (以及推送時),我們的 CI 將執行程式碼檢查,並在 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}
請參閱 crossbow 組態開頭附近的 r:
群組定義,以取得符合下方 tasks:
清單中項目名稱的 glob 運算式模式清單。