{
  "_id": "6a1015ffacfb0bcc41c8441d",
  "Package": "flir",
  "Type": "Package",
  "Title": "Find and Fix Lints in R Code",
  "Version": "0.6.0",
  "Authors@R": "c(person(given = \"Etienne\",\nfamily = \"Bacher\",\nrole = c(\"aut\", \"cre\", \"cph\"),\nemail = \"etienne.bacher@protonmail.com\"),\nperson(\"lintr authors\", role = \"aut\"),\nperson(\"Trevor L.\", \"Davis\", role = c(\"ctb\"),\ncomment = c(ORCID = \"0000-0001-6341-4639\")))",
  "Description": "Lints are code patterns that are not optimal because they\nare inefficient, forget corner cases, or are less readable.\n'flir' provides a small set of functions to detect those lints\nand automatically fix them. It builds on 'astgrepr', which\nitself uses the 'Rust' crate 'ast-grep' to parse and navigate R\ncode.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "RoxygenNote": "7.3.2",
  "URL": "https://flir.etiennebacher.com,\nhttps://github.com/etiennebacher/flir",
  "BugReports": "https://github.com/etiennebacher/flir/issues",
  "Config/testthat/edition": "3",
  "Roxygen": "list(markdown = TRUE)",
  "VignetteBuilder": "knitr",
  "Config/testthat/parallel": "true",
  "Language": "en-US",
  "Config/pak/sysreqs": "cmake make libgit2-dev libssh2-1-dev libuv1-dev\nlibssl-dev",
  "Repository": "https://etiennebacher.r-universe.dev",
  "Date/Publication": "2025-12-15 06:22:51 UTC",
  "RemoteUrl": "https://github.com/etiennebacher/flir",
  "RemoteRef": "v0.6.0",
  "RemoteSha": "9254cd01d258d0bafcee41a44e5caa7104fed832",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-14 08:06:16 UTC",
    "User": "root"
  },
  "Author": "Etienne Bacher [aut, cre, cph],\nlintr authors [aut],\nTrevor L. Davis [ctb] (ORCID: <https://orcid.org/0000-0001-6341-4639>)",
  "Maintainer": "Etienne Bacher <etienne.bacher@protonmail.com>",
  "MD5sum": "eef1e045a4df71742198145439e9ab7f",
  "_user": "etiennebacher",
  "_type": "src",
  "_file": "flir_0.6.0.tar.gz",
  "_fileid": "a2e02d39dbf01d7138b6ffcbe24596e49bd46d0fb8c1581e654483cf9ee81c10",
  "_filesize": 2022486,
  "_sha256": "a2e02d39dbf01d7138b6ffcbe24596e49bd46d0fb8c1581e654483cf9ee81c10",
  "_created": "2026-05-14T08:06:16.000Z",
  "_published": "2026-05-22T08:38:23.897Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 77345138457,
      "time": 161,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "6990024679"
    },
    {
      "job": 77345138797,
      "time": 189,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6990029983"
    },
    {
      "job": 77345138765,
      "time": 182,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7010929931"
    },
    {
      "job": 77345138400,
      "time": 193,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6990020642"
    },
    {
      "job": 77345138481,
      "time": 212,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6989979509"
    },
    {
      "job": 77345138298,
      "time": 133,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7156327234"
    },
    {
      "job": 77345138547,
      "time": 149,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "6990019766"
    },
    {
      "job": 77345138747,
      "time": 134,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6990015813"
    },
    {
      "job": 77345138651,
      "time": 146,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6990018988"
    }
  ],
  "_buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/etiennebacher/flir",
  "_commit": {
    "id": "9254cd01d258d0bafcee41a44e5caa7104fed832",
    "author": "Etienne Bacher <52219252+etiennebacher@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "feat: Release 0.6.0 (#121)\n\n",
    "time": 1765779771
  },
  "_maintainer": {
    "name": "Etienne Bacher",
    "email": "etienne.bacher@protonmail.com",
    "login": "etiennebacher",
    "mastodon": "@etiennebacher@mastodon.social",
    "bluesky": "@etiennebacher.bsky.social",
    "uuid": 52219252
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.2",
      "role": "Depends"
    },
    {
      "package": "astgrepr",
      "version": ">= 0.1.0",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "crayon",
      "role": "Imports"
    },
    {
      "package": "data.table",
      "role": "Imports"
    },
    {
      "package": "digest",
      "role": "Imports"
    },
    {
      "package": "fs",
      "role": "Imports"
    },
    {
      "package": "git2r",
      "role": "Imports"
    },
    {
      "package": "rprojroot",
      "role": "Imports"
    },
    {
      "package": "yaml",
      "role": "Imports"
    },
    {
      "package": "diffviewer",
      "role": "Suggests"
    },
    {
      "package": "glue",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "patrick",
      "role": "Suggests"
    },
    {
      "package": "rlang",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "rstudioapi",
      "role": "Suggests"
    },
    {
      "package": "shiny",
      "role": "Suggests"
    },
    {
      "package": "spelling",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "tibble",
      "role": "Suggests"
    },
    {
      "package": "usethis",
      "role": "Suggests"
    },
    {
      "package": "utils",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "etiennebacher",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-20",
      "n": 1
    },
    {
      "week": "2025-21",
      "n": 11
    },
    {
      "week": "2025-22",
      "n": 2
    },
    {
      "week": "2025-23",
      "n": 1
    },
    {
      "week": "2025-24",
      "n": 6
    },
    {
      "week": "2025-25",
      "n": 9
    },
    {
      "week": "2025-26",
      "n": 4
    },
    {
      "week": "2025-27",
      "n": 3
    },
    {
      "week": "2025-28",
      "n": 1
    },
    {
      "week": "2025-32",
      "n": 1
    },
    {
      "week": "2025-36",
      "n": 3
    },
    {
      "week": "2025-37",
      "n": 5
    },
    {
      "week": "2025-47",
      "n": 2
    },
    {
      "week": "2025-50",
      "n": 2
    },
    {
      "week": "2025-51",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "v0.4.0",
      "date": "2025-05-18"
    },
    {
      "name": "v0.4.1",
      "date": "2025-05-20"
    },
    {
      "name": "v0.4.2",
      "date": "2025-05-21"
    },
    {
      "name": "v0.5.0",
      "date": "2025-06-17"
    },
    {
      "name": "v0.6.0",
      "date": "2025-12-15"
    }
  ],
  "_stars": 88,
  "_contributors": [
    {
      "user": "etiennebacher",
      "count": 363,
      "uuid": 52219252
    },
    {
      "user": "trevorld",
      "count": 5,
      "uuid": 2433259
    },
    {
      "user": "remlapmot",
      "count": 2,
      "uuid": 3777473
    }
  ],
  "_userbio": {
    "uuid": 52219252,
    "type": "user",
    "name": "Etienne Bacher"
  },
  "_downloads": {
    "count": 249,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/flir"
  },
  "_devurl": "https://github.com/etiennebacher/flir",
  "_pkgdown": "https://flir.etiennebacher.com",
  "_searchresults": 8,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/flir.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/etiennebacher/flir",
  "_realowner": "etiennebacher",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.5.0",
      "date": "2025-06-28"
    },
    {
      "version": "0.6.0",
      "date": "2025-12-14"
    }
  ],
  "_exports": [
    "add_new_rule",
    "any_duplicated_linter",
    "any_is_na_linter",
    "class_equals_linter",
    "condition_message_linter",
    "double_assignment_linter",
    "duplicate_argument_linter",
    "empty_assignment_linter",
    "equal_assignment_linter",
    "equals_na_linter",
    "expect_comparison_linter",
    "expect_identical_linter",
    "expect_length_linter",
    "expect_named_linter",
    "expect_not_linter",
    "expect_null_linter",
    "expect_s3_class_linter",
    "expect_s4_class_linter",
    "expect_true_false_linter",
    "expect_type_linter",
    "export_new_rule",
    "fix",
    "fix_dir",
    "fix_package",
    "fix_text",
    "for_loop_index_linter",
    "function_return_linter",
    "implicit_assignment_linter",
    "is_numeric_linter",
    "length_levels_linter",
    "length_test_linter",
    "lengths_linter",
    "library_call_linter",
    "lint",
    "lint_dir",
    "lint_package",
    "lint_text",
    "list_comparison_linter",
    "list_linters",
    "literal_coercion_linter",
    "matrix_apply_linter",
    "missing_argument_linter",
    "nested_ifelse_linter",
    "numeric_leading_zero_linter",
    "nzchar_linter",
    "outer_negation_linter",
    "package_hooks_linter",
    "paste_linter",
    "redundant_equals_linter",
    "redundant_ifelse_linter",
    "rep_len_linter",
    "right_assignment_linter",
    "sample_int_linter",
    "seq_linter",
    "setup_flir",
    "setup_flir_gha",
    "sort_linter",
    "stopifnot_all_linter",
    "T_and_F_symbol_linter",
    "todo_comment_linter",
    "undesirable_function_linter",
    "undesirable_operator_linter",
    "unnecessary_nesting_linter",
    "vector_logic_linter",
    "which_grepl_linter"
  ],
  "_help": [
    {
      "page": "add_new_rule",
      "title": "Create a custom rule for internal use",
      "topics": [
        "add_new_rule"
      ]
    },
    {
      "page": "any_duplicated_linter",
      "title": "Require usage of 'anyDuplicated(x) > 0' over 'any(duplicated(x))'",
      "topics": [
        "any_duplicated_linter"
      ]
    },
    {
      "page": "any_is_na_linter",
      "title": "Require usage of 'anyNA(x)' over 'any(is.na(x))'",
      "topics": [
        "any_is_na_linter"
      ]
    },
    {
      "page": "class_equals_linter",
      "title": "Block comparison of class with '=='",
      "topics": [
        "class_equals_linter"
      ]
    },
    {
      "page": "condition_message_linter",
      "title": "Block usage of 'paste()' and 'paste0()' with messaging functions using '...'",
      "topics": [
        "condition_message_linter"
      ]
    },
    {
      "page": "double_assignment_linter",
      "title": "double_assignment",
      "topics": [
        "double_assignment_linter"
      ]
    },
    {
      "page": "duplicate_argument_linter",
      "title": "Duplicate argument linter",
      "topics": [
        "duplicate_argument_linter"
      ]
    },
    {
      "page": "empty_assignment_linter",
      "title": "empty_assignment",
      "topics": [
        "empty_assignment_linter"
      ]
    },
    {
      "page": "equal_assignment_linter",
      "title": "equal_assignment",
      "topics": [
        "equal_assignment_linter"
      ]
    },
    {
      "page": "equals_na_linter",
      "title": "Equality check with NA linter",
      "topics": [
        "equals_na_linter"
      ]
    },
    {
      "page": "expect_comparison_linter",
      "title": "Require usage of 'expect_gt(x, y)' over 'expect_true(x > y)' (and similar)",
      "topics": [
        "expect_comparison_linter"
      ]
    },
    {
      "page": "expect_identical_linter",
      "title": "Require usage of 'expect_identical(x, y)' where appropriate",
      "topics": [
        "expect_identical_linter"
      ]
    },
    {
      "page": "expect_length_linter",
      "title": "Require usage of 'expect_length(x, n)' over 'expect_equal(length(x), n)'",
      "topics": [
        "expect_length_linter"
      ]
    },
    {
      "page": "expect_named_linter",
      "title": "Require usage of 'expect_named(x, n)' over 'expect_equal(names(x), n)'",
      "topics": [
        "expect_named_linter"
      ]
    },
    {
      "page": "expect_not_linter",
      "title": "Require usage of 'expect_false(x)' over 'expect_true(!x)'",
      "topics": [
        "expect_not_linter"
      ]
    },
    {
      "page": "expect_null_linter",
      "title": "Require usage of 'expect_null' for checking 'NULL'",
      "topics": [
        "expect_null_linter"
      ]
    },
    {
      "page": "expect_s3_class_linter",
      "title": "Require usage of 'expect_s3_class()'",
      "topics": [
        "expect_s3_class_linter"
      ]
    },
    {
      "page": "expect_s4_class_linter",
      "title": "Require usage of 'expect_s4_class(x, k)' over 'expect_true(is(x, k))'",
      "topics": [
        "expect_s4_class_linter"
      ]
    },
    {
      "page": "expect_true_false_linter",
      "title": "Require usage of 'expect_true(x)' over 'expect_equal(x, TRUE)'",
      "topics": [
        "expect_true_false_linter"
      ]
    },
    {
      "page": "expect_type_linter",
      "title": "Require usage of 'expect_type(x, type)' over 'expect_equal(typeof(x), type)'",
      "topics": [
        "expect_type_linter"
      ]
    },
    {
      "page": "export_new_rule",
      "title": "Create a custom rule for external use",
      "topics": [
        "export_new_rule"
      ]
    },
    {
      "page": "fix",
      "title": "Automatically replace lints",
      "topics": [
        "fix",
        "fix_dir",
        "fix_package",
        "fix_text"
      ]
    },
    {
      "page": "for_loop_index_linter",
      "title": "Block usage of for loops directly overwriting the indexing variable",
      "topics": [
        "for_loop_index_linter"
      ]
    },
    {
      "page": "function_return_linter",
      "title": "Lint common mistakes/style issues cropping up from return statements",
      "topics": [
        "function_return_linter"
      ]
    },
    {
      "page": "implicit_assignment_linter",
      "title": "implicit_assignment",
      "topics": [
        "implicit_assignment_linter"
      ]
    },
    {
      "page": "is_numeric_linter",
      "title": "Redirect 'is.numeric(x) || is.integer(x)' to just use 'is.numeric(x)'",
      "topics": [
        "is_numeric_linter"
      ]
    },
    {
      "page": "length_levels_linter",
      "title": "Require usage of nlevels over length(levels(.))",
      "topics": [
        "length_levels_linter"
      ]
    },
    {
      "page": "length_test_linter",
      "title": "Check for a common mistake where length is applied in the wrong place",
      "topics": [
        "length_test_linter"
      ]
    },
    {
      "page": "lengths_linter",
      "title": "Require usage of 'lengths()' where possible",
      "topics": [
        "lengths_linter"
      ]
    },
    {
      "page": "library_call_linter",
      "title": "Library call linter",
      "topics": [
        "library_call_linter"
      ]
    },
    {
      "page": "lint",
      "title": "List all lints in a file or a directory",
      "topics": [
        "lint",
        "lint_dir",
        "lint_package",
        "lint_text"
      ]
    },
    {
      "page": "list_comparison_linter",
      "title": "Block usage of comparison operators with known-list() functions like lapply",
      "topics": [
        "list_comparison_linter"
      ]
    },
    {
      "page": "list_linters",
      "title": "Get the list of linters in 'flir'",
      "topics": [
        "list_linters"
      ]
    },
    {
      "page": "literal_coercion_linter",
      "title": "Require usage of correctly-typed literals over literal coercions",
      "topics": [
        "literal_coercion_linter"
      ]
    },
    {
      "page": "matrix_apply_linter",
      "title": "Require usage of 'colSums(x)' or 'rowSums(x)' over 'apply(x, ., sum)'",
      "topics": [
        "matrix_apply_linter"
      ]
    },
    {
      "page": "missing_argument_linter",
      "title": "Missing argument linter",
      "topics": [
        "missing_argument_linter"
      ]
    },
    {
      "page": "nested_ifelse_linter",
      "title": "Block usage of nested 'ifelse()' calls",
      "topics": [
        "nested_ifelse_linter"
      ]
    },
    {
      "page": "numeric_leading_zero_linter",
      "title": "Require usage of a leading zero in all fractional numerics",
      "topics": [
        "numeric_leading_zero_linter"
      ]
    },
    {
      "page": "nzchar_linter",
      "title": "Require usage of nzchar where appropriate",
      "topics": [
        "nzchar_linter"
      ]
    },
    {
      "page": "outer_negation_linter",
      "title": "Require usage of '!any(x)' over 'all(!x)', '!all(x)' over 'any(!x)'",
      "topics": [
        "outer_negation_linter"
      ]
    },
    {
      "page": "package_hooks_linter",
      "title": "Package hooks linter",
      "topics": [
        "package_hooks_linter"
      ]
    },
    {
      "page": "paste_linter",
      "title": "Raise lints for several common poor usages of 'paste()'",
      "topics": [
        "paste_linter"
      ]
    },
    {
      "page": "redundant_equals_linter",
      "title": "Block usage of '==', '!=' on logical vectors",
      "topics": [
        "redundant_equals_linter"
      ]
    },
    {
      "page": "redundant_ifelse_linter",
      "title": "Prevent 'ifelse()' from being used to produce 'TRUE'/'FALSE' or '1'/'0'",
      "topics": [
        "redundant_ifelse_linter"
      ]
    },
    {
      "page": "rep_len_linter",
      "title": "Require usage of rep_len(x, n) over rep(x, length.out = n)",
      "topics": [
        "rep_len_linter"
      ]
    },
    {
      "page": "right_assignment_linter",
      "title": "right_assignment",
      "topics": [
        "right_assignment_linter"
      ]
    },
    {
      "page": "sample_int_linter",
      "title": "Require usage of sample.int(n, m, ...) over sample(1:n, m, ...)",
      "topics": [
        "sample_int_linter"
      ]
    },
    {
      "page": "seq_linter",
      "title": "Sequence linter",
      "topics": [
        "seq_linter"
      ]
    },
    {
      "page": "setup_flir",
      "title": "Setup flir",
      "topics": [
        "setup_flir"
      ]
    },
    {
      "page": "setup_flir_gha",
      "title": "Create a Github Actions workflow for 'flir'",
      "topics": [
        "setup_flir_gha"
      ]
    },
    {
      "page": "sort_linter",
      "title": "Check for common mistakes around sorting vectors",
      "topics": [
        "sort_linter"
      ]
    },
    {
      "page": "stopifnot_all_linter",
      "title": "Block usage of all() within stopifnot()",
      "topics": [
        "stopifnot_all_linter"
      ]
    },
    {
      "page": "T_and_F_symbol_linter",
      "title": "'T' and 'F' symbol linter",
      "topics": [
        "T_and_F_symbol_linter"
      ]
    },
    {
      "page": "todo_comment_linter",
      "title": "TODO comment linter",
      "topics": [
        "todo_comment_linter"
      ]
    },
    {
      "page": "undesirable_function_linter",
      "title": "Undesirable function linter",
      "topics": [
        "undesirable_function_linter"
      ]
    },
    {
      "page": "undesirable_operator_linter",
      "title": "Undesirable operator linter",
      "topics": [
        "undesirable_operator_linter"
      ]
    },
    {
      "page": "unnecessary_nesting_linter",
      "title": "Block instances of unnecessary nesting",
      "topics": [
        "unnecessary_nesting_linter"
      ]
    },
    {
      "page": "vector_logic_linter",
      "title": "Enforce usage of scalar logical operators in conditional statements",
      "topics": [
        "vector_logic_linter"
      ]
    },
    {
      "page": "which_grepl_linter",
      "title": "Require usage of grep over which(grepl(.))",
      "topics": [
        "which_grepl_linter"
      ]
    }
  ],
  "_readme": "https://github.com/etiennebacher/flir/raw/v0.6.0/README.md",
  "_rundeps": [
    "astgrepr",
    "backports",
    "checkmate",
    "cli",
    "crayon",
    "data.table",
    "digest",
    "fs",
    "git2r",
    "rprojroot",
    "rrapply",
    "yaml"
  ],
  "_vignettes": [
    {
      "source": "adding_rules.Rmd",
      "filename": "adding_rules.html",
      "title": "Adding new rules",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Step 1: setup",
        "Step 2: start exploring",
        "Step 3 (optional): add to config",
        "Step 4: enjoy"
      ],
      "created": "2024-07-01 19:24:30",
      "modified": "2025-06-16 21:10:13",
      "commits": 12
    },
    {
      "source": "automatic_fixes.Rmd",
      "filename": "automatic_fixes.html",
      "title": "Automatic fixes",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Use Git",
        "Interactively review all fixes"
      ],
      "created": "2025-05-22 09:14:11",
      "modified": "2025-06-09 08:23:43",
      "commits": 2
    },
    {
      "source": "sharing_rules.Rmd",
      "filename": "sharing_rules.html",
      "title": "Sharing rules across packages",
      "engine": "knitr::rmarkdown",
      "headings": [
        "State of the package",
        "For package developers",
        "For users"
      ],
      "created": "2025-06-12 12:16:51",
      "modified": "2025-06-16 15:00:10",
      "commits": 5
    },
    {
      "source": "tips-and-tricks.Rmd",
      "filename": "tips-and-tricks.html",
      "title": "Tips and tricks",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Writing a fix on several lines",
        "Detecting double and single quotes"
      ],
      "created": "2025-06-29 12:01:26",
      "modified": "2025-06-30 09:31:52",
      "commits": 2
    }
  ],
  "_score": 7.722633922533813,
  "_indexed": true,
  "_nocasepkg": "flir",
  "_universes": [
    "etiennebacher"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.6.0",
      "date": "2026-05-14T08:08:39.000Z",
      "distro": "noble",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "c1778c70f96da744b61d840fbfaabd1570499b95c3e4e3dfb2a22d345993585f",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.6.0",
      "date": "2026-05-14T08:09:00.000Z",
      "distro": "noble",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "b4b7cfd702c3dbc7139e03a190c6bf175b0d80f9810cd915bea7a1a9a1885c64",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.6.0",
      "date": "2026-05-15T05:49:12.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "29f0ab3454aca89966a08929e469b9df28a8a2cbbe6f5ec4fa131c9707a87c40",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.6.0",
      "date": "2026-05-14T08:08:19.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "e2da9aeecdf2d90b04c806608a73b2fdba910b3c9a3109016f0ba0da1ddf49c0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.6.0",
      "date": "2026-05-14T08:07:43.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "44a7695fb1fc93e4e75018e6ed93ab52431f4930206ce86a50acff24901ab3b6",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.6.0",
      "date": "2026-05-14T08:07:30.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "82cd3ae19de98b2cbd318171a5a5dc7fefb3dc18357dbd57f68dee0f2ee3eda1",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.6.0",
      "date": "2026-05-14T08:07:40.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "5315d94101f4432dd4f2f0bc5373518a312d78838ab830495d6722f2705947d7",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.6.0",
      "date": "2026-05-22T08:38:07.000Z",
      "commit": "9254cd01d258d0bafcee41a44e5caa7104fed832",
      "fileid": "9c401b30d0958d52288d97aac2d04b98949d5d156b8daddaf5d0c24acaabb840",
      "status": "success",
      "buildurl": "https://github.com/r-universe/etiennebacher/actions/runs/25849071035"
    }
  ]
}