Last active
February 25, 2021 04:06
-
-
Save russHyde/568fd5af558c860d97e1b932ca773ff7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# compare the object-usage lints obtained before/after a given PR | |
# the PR is always compared against master | |
library(magrittr) | |
library(dplyr) | |
library(purrr) | |
library(tibble) | |
# In lintr directory | |
lint_all_packages <- function(pkgs, linter) { | |
map(pkgs, function(x) { | |
lint_dir(x, linters = linter, parse_settings = FALSE) | |
}) %>% | |
set_names(basename(pkgs)) | |
} | |
format_lints <- function(x) { | |
x %>% | |
map(as_tibble) %>% | |
bind_rows(.id = "package") | |
} | |
run_workflow <- function(pkg_dir, pr, linter_name) { | |
stopifnot(dir.exists(pkg_dir)) | |
if(!file.exists("lintr.Rproj")) { | |
"compare_branches.R should be run inside the lintr-package directory" | |
} | |
pkgs <- dir(pkg_dir, full.names=TRUE) | |
# lints from current-master branch | |
git2r::checkout(branch = "master") | |
devtools::load_all() | |
linter <- get(linter_name)() | |
main_lints <- pkgs %>% | |
lint_all_packages(linter) %>% | |
format_lints() | |
# load the new version of lintr | |
usethis::pr_fetch(pr) | |
devtools::load_all() | |
linter <- get(linter_name)() | |
pr_lints <- pkgs %>% | |
lint_all_packages(linter) %>% | |
format_lints() | |
# revert back to main | |
git2r::checkout(branch = "master") | |
list( | |
main = main_lints, | |
pr = pr_lints | |
) | |
} | |
############################################################################### | |
# TODO: handle both command line args and interactive runs | |
# TODO: handle the case when working directory is not the lintr directory | |
# TODO: convert to the original branch (if this was not master) | |
# - at the end of the workflow (currently this always converts back to | |
# master) | |
# - and if there is any error when running the workflow | |
# TODO: save data.frame of lints to file | |
############################################################################### | |
# User should define the following in an interactive session: | |
# - 'pr' the number of the pull request that is to be compared against master | |
# - 'linter_name' the linter whose behaviour should be compared before/after | |
# the PR-associated changes | |
# - 'pkg_dir' pathname for a directory that contains the repositories that are | |
# to be analysed; | |
# | |
# ... and then source this script | |
pr <- if (exists("pr")) pr else 709 | |
linter_name <- if (exists("linter_name")) linter_name else "object_usage_linter" | |
pkg_dir <- if (exists("pkg_dir")) { | |
pkg_dir | |
} else { | |
file.path("~", "proj", "code_as_data", "data", "packages") | |
} | |
message(pr) | |
message(linter_name) | |
message("Any package repo found in this directory will be analysed:", pkg_dir) | |
lints <- run_workflow(pkg_dir, pr, linter_name) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A modified version of this script is being added to lintr: r-lib/lintr#760