Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/coatless-rpkg/errorist

Automatic Error and Warning Search from R
https://github.com/coatless-rpkg/errorist

error-handling errors r r-programming rstats search-engine warnings

Last synced: about 1 month ago
JSON representation

Automatic Error and Warning Search from R

Awesome Lists containing this project

README

        

---
output: github_document
---

```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
```

# errorist

[![R-CMD-check](https://github.com/coatless-rpkg/errorist/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/coatless-rpkg/errorist/actions/workflows/R-CMD-check.yaml)
[![CRAN\_Status\_Badge](https://www.r-pkg.org/badges/version/errorist)](https://cran.r-project.org/package=errorist)
[![CRAN RStudio mirror downloads](https://cranlogs.r-pkg.org/badges/errorist)](https://www.r-pkg.org/pkg/errorist)

>
> _errorist_: one who holds to and propagates error
>
> --- [Merriam Webster](https://www.merriam-webster.com/dictionary/errorist)

The goal of `errorist` is to automatically search errors and warnings the
second they arise.

![](https://media.giphy.com/media/l1IBjB9qJ2jOnntOU/giphy.gif)

## Installation

The `errorist` package is available on both CRAN and GitHub. The CRAN
version is considered stable while the GitHub version is in a state of
development and may break. You can install the stable version of the
`errorist` package with:

```r
install.packages("errorist")
```

For the development version, you can opt for:

```r
if(!requireNamespace("remotes")) { install.packages("remotes") }
remotes::install_github("coatless-rpkg/errorist")
```

## Usage

```r
library(errorist)
```

## Details

When the `errorist` package is loaded, two handlers are automatically
established to intercept the error and warning messages that arise during
execution of code. The intercepted messages are then directed to pre-specified
search engines on the internet using the user's preferred system web browser.
By default, the search engine used to look up the messages is Google.

You can specify a different search engine handler by setting default values:

- `errorist.warning`: Warning search engine portal. The default is `searcher::search_google`.
- `errorist.error`: Error search engine portal. The default is `searcher::search_google`.
- `errorist.autoload`: Automatically search errors. The default is `TRUE`.

If frequent use of the package occurs, consider adding the different search
handlers as an option in your `.Rprofile`:

```r
# Add custom options
.First <- function() {
options(
errorist.warning = searcher::search_google,
errorist.error = searcher::search_google
)
}

# Load the package if in RStudio or R GUI
if (interactive()) {
suppressMessages(require(errorist))
}
```

# Motivation

The idea for `errorist` came from a conversation among
[Dirk Eddelbuettel](http://dirk.eddelbuettel.com),
[Barry Rowlingson](http://barry.rowlingson.com), and myself musing about
having compilers provide a link explaining what the error meant and how to
solve it. This conversation was sprouted due to the mouse overtext of
[XKCD Comic 1185: Ineffective Sorts](https://xkcd.com/1185/).

> StackSort connects to StackOverflow, searches for 'sort a list', and downloads
> and runs code snippets until the list is sorted.

This type of code search was implemented by:

The idea morphed from evaluating random code chunks to providing search support
for errors that occurred at runtime.

# Special Thanks

- [Dirk Eddelbuettel](http://dirk.eddelbuettel.com) for starting the discussion
on [XKCD Comic 1185: Ineffective Sorts](https://xkcd.com/1185/).
- [Barry Rowlingson](http://barry.rowlingson.com) for the package name and
remarks about functionality.
- [Brodie Gaslam](https://www.brodieg.com/) for pointing out
[`addTaskCallback()`](https://stat.ethz.ch/R-manual/R-devel/library/base/html/taskCallback.html)
as a way to create a warning handler and for a brief discussion on "call"
objects.
- [Joshua Ulrich](https://github.com/joshuaulrich/) for advise on incorporating
the semi-documented [`last.warning`](https://stat.ethz.ch/R-manual/R-devel/library/base/html/warning.html)
object that _R_ populates with warning messages.

# License

GPL (>= 2)