跳至內容

Arrow R 套件使用數個額外的開發工具

  • lintr 用於程式碼分析
  • styler 用於程式碼樣式設定
  • pkgdown 用於建立網站
  • roxygen2 用於文件化套件
    • R 文件使用 @examplesIf 標籤,此標籤在 roxygen2 7.1.2 版中引入

您可以執行以下命令來安裝所有這些額外的相依性

install.packages(c("lintr", "styler", "pkgdown", "roxygen2"))

arrow/r 目錄包含一個 Makefile,以協助從命令列執行一些常見任務 (例如,make testmake docmake clean 等)。

載入 arrow

您可以透過 devtools::load_all() 載入 R 套件。

重新建置文件

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 套件自動變更套件中程式碼的格式。有兩種方法可以做到這一點

  1. 使用註解機器人,透過在 PR 上使用命令 @github-actions autotune 自動執行此操作,並將其提交回分支。

  2. 在本機透過 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_IDAWS_SECRET_ACCESS_KEY 中設定憑證,否則會停用針對真實 S3 儲存桶的整合測試;這些憑證可依要求提供

  • 如果找到 minio server 處理程序正在執行,則會啟用在本機使用 MinIO 的 S3 測試。如果您使用自訂設定執行 MinIO,您可以設定 MINIO_ACCESS_KEYMINIO_SECRET_KEYMINIO_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 註解命令。

執行所有擴充的 R CI 任務

@github-actions crossbow submit -g r

這會執行每個與 R 相關的 CI 任務。

執行特定任務

@github-actions crossbow submit {task-name}

請參閱 crossbow 組態開頭附近的 r: 群組定義,以取得符合下方 tasks: 清單中項目名稱的 glob 運算式模式清單。

執行程式碼檢查和文件建置任務

@github-actions autotune

這將執行並修正 C++ 程式碼檢查錯誤、執行 R 文件 (以及其他清理任務)、在任何變更的 R 程式碼上執行 styler,並將產生的更新提交到分支。