Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A clean way to track functions from external packages #239

Closed
4 tasks done
wlandau opened this issue Dec 1, 2020 · 0 comments
Closed
4 tasks done

A clean way to track functions from external packages #239

wlandau opened this issue Dec 1, 2020 · 0 comments
Assignees

Comments

@wlandau
Copy link
Member

wlandau commented Dec 1, 2020

Prework

  • Read and agree to the code of conduct and contributing guidelines.
  • If there is already a relevant issue, whether open or closed, comment on the existing thread instead of posting a new issue.
  • New features take time and effort to create, and they take even more effort to maintain. So if the purpose of the feature is to resolve a struggle you are encountering personally, please consider first posting a "trouble" or "other" issue so we can discuss your use case and search for existing solutions first.
  • Format your code according to the tidyverse style guide.

Motivation

#132, #235, ropensci/drake#1286. Tracking functions from packages has been an issue for years, and it's tricky because packages have their own environments. Until now, the choices have been:

  1. Ignore package functions.
  2. Track only the functions inside a single package, ignoring the global environment.
  3. Manually assign package functions into the global environment.

(1) is severely limiting, (2) is still limiting, and (3) is a brittle hack that breaks environments and closures.

Proposal

Distinguish between the environment that runs targets and the environment to inspect for global dependencies. targets could manually create the latter while leaving the former completely untouched. By default, they could be the same. But if the user assigns tar_option_set(imports = c("analysisPackage1", "analysisPackage2")), targets could create a new environment, copy in everything from getNamespace("analysisPackage2"), do the same for getNamespace("analysisPackage1"), and then again for tar_option_get("envir"). Simple to implement and best of all worlds!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant