Skip to content

Commit ef2310b

Browse files
authored
Upkeep 2023 (#399)
* Use `test_path()` * `usethis::use_readme_rmd()` * `usethis::use_tidy_style()` * `usethis::use_package_doc()` * Align the names of `R/` and `/test` files * Remove `context()` * Replace `expect_is()` by `expect_s3_class()` * Replace `expect_that()` * Use `expect_type()` in two places * Replace `expect_equivalent()` * Replace `expect_output()` by snapshots * Brace test * `usethis::use_tidy_dependencies()` * `usethis::use_tidy_github_actions()` * Bump R to 3.6 * `usethis::use_tidy_coc()` * `devtools::document()` * Use standalone type check * Replace `stop()` by `abort()` * Add files to Collate
1 parent f6f0ceb commit ef2310b

File tree

94 files changed

+2923
-1115
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+2923
-1115
lines changed

.Rbuildignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ windows
2323
\.o$
2424
\.so$
2525
^CRAN-SUBMISSION$
26+
^README\.Rmd$

.github/CODE_OF_CONDUCT.md

Lines changed: 120 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,126 @@
1-
# Contributor Code of Conduct
1+
# Contributor Covenant Code of Conduct
22

3-
As contributors and maintainers of this project, we pledge to respect all people who
4-
contribute through reporting issues, posting feature requests, updating documentation,
5-
submitting pull requests or patches, and other activities.
3+
## Our Pledge
64

7-
We are committed to making participation in this project a harassment-free experience for
8-
everyone, regardless of level of experience, gender, gender identity and expression,
9-
sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, caste, color, religion, or sexual
10+
identity and orientation.
1011

11-
Examples of unacceptable behavior by participants include the use of sexual language or
12-
imagery, derogatory comments or personal attacks, trolling, public or private harassment,
13-
insults, or other unprofessional conduct.
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
1414

15-
Project maintainers have the right and responsibility to remove, edit, or reject comments,
16-
commits, code, wiki edits, issues, and other contributions that are not aligned to this
17-
Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed
18-
from the project team.
15+
## Our Standards
1916

20-
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by
21-
opening an issue or contacting one or more of the project maintainers.
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
2219

23-
This Code of Conduct is adapted from the Contributor Covenant
24-
(https://www.contributor-covenant.org), version 1.0.0, available at
25-
https://contributor-covenant.org/version/1/0/0/.
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the overall
26+
community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or advances of
31+
any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email address,
35+
without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official e-mail address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at [email protected].
63+
All complaints will be reviewed and investigated promptly and fairly.
64+
65+
All community leaders are obligated to respect the privacy and security of the
66+
reporter of any incident.
67+
68+
## Enforcement Guidelines
69+
70+
Community leaders will follow these Community Impact Guidelines in determining
71+
the consequences for any action they deem in violation of this Code of Conduct:
72+
73+
### 1. Correction
74+
75+
**Community Impact**: Use of inappropriate language or other behavior deemed
76+
unprofessional or unwelcome in the community.
77+
78+
**Consequence**: A private, written warning from community leaders, providing
79+
clarity around the nature of the violation and an explanation of why the
80+
behavior was inappropriate. A public apology may be requested.
81+
82+
### 2. Warning
83+
84+
**Community Impact**: A violation through a single incident or series of
85+
actions.
86+
87+
**Consequence**: A warning with consequences for continued behavior. No
88+
interaction with the people involved, including unsolicited interaction with
89+
those enforcing the Code of Conduct, for a specified period of time. This
90+
includes avoiding interactions in community spaces as well as external channels
91+
like social media. Violating these terms may lead to a temporary or permanent
92+
ban.
93+
94+
### 3. Temporary Ban
95+
96+
**Community Impact**: A serious violation of community standards, including
97+
sustained inappropriate behavior.
98+
99+
**Consequence**: A temporary ban from any sort of interaction or public
100+
communication with the community for a specified period of time. No public or
101+
private interaction with the people involved, including unsolicited interaction
102+
with those enforcing the Code of Conduct, is allowed during this period.
103+
Violating these terms may lead to a permanent ban.
104+
105+
### 4. Permanent Ban
106+
107+
**Community Impact**: Demonstrating a pattern of violation of community
108+
standards, including sustained inappropriate behavior, harassment of an
109+
individual, or aggression toward or disparagement of classes of individuals.
110+
111+
**Consequence**: A permanent ban from any sort of public interaction within the
112+
community.
113+
114+
## Attribution
115+
116+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
117+
version 2.1, available at
118+
<https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
119+
120+
Community Impact Guidelines were inspired by
121+
[Mozilla's code of conduct enforcement ladder][https://github.com/mozilla/inclusion].
122+
123+
For answers to common questions about this code of conduct, see the FAQ at
124+
<https://www.contributor-covenant.org/faq>. Translations are available at <https://www.contributor-covenant.org/translations>.
125+
126+
[homepage]: https://www.contributor-covenant.org

.github/workflows/R-CMD-check.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ jobs:
2222
fail-fast: false
2323
matrix:
2424
config:
25-
- {os: macOS-latest, r: 'release'}
26-
- {os: macOS-12, r: 'release'}
25+
- {os: macos-latest, r: 'release'}
2726

2827
- {os: windows-latest, r: 'release'}
29-
- {os: windows-latest, r: '4.1'}
28+
# Use 3.6 to trigger usage of RTools35
3029
- {os: windows-latest, r: '3.6'}
30+
# use 4.1 to check with rtools40's older compiler
31+
- {os: windows-latest, r: '4.1'}
3132

32-
# Use older ubuntu to maximise backward compatibility
3333
- {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
3434
- {os: ubuntu-latest, r: 'release'}
3535
- {os: ubuntu-latest, r: 'oldrel-1'}

.github/workflows/pkgdown.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ jobs:
1919
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
2020
env:
2121
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
22+
permissions:
23+
contents: write
2224
steps:
23-
- uses: actions/checkout@v2
25+
- uses: actions/checkout@v3
2426

2527
- uses: r-lib/actions/setup-pandoc@v2
2628

@@ -39,7 +41,7 @@ jobs:
3941

4042
- name: Deploy to GitHub pages 🚀
4143
if: github.event_name != 'pull_request'
42-
uses: JamesIves/[email protected].4
44+
uses: JamesIves/github-pages-deploy-action@v4.4.1
4345
with:
4446
clean: false
4547
branch: gh-pages

.github/workflows/pr-commands.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
env:
1515
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
1616
steps:
17-
- uses: actions/checkout@v2
17+
- uses: actions/checkout@v3
1818

1919
- uses: r-lib/actions/pr-fetch@v2
2020
with:
@@ -51,7 +51,7 @@ jobs:
5151
env:
5252
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
5353
steps:
54-
- uses: actions/checkout@v2
54+
- uses: actions/checkout@v3
5555

5656
- uses: r-lib/actions/pr-fetch@v2
5757
with:

.github/workflows/test-coverage.yaml

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
1616

1717
steps:
18-
- uses: actions/checkout@v2
18+
- uses: actions/checkout@v3
1919

2020
- uses: r-lib/actions/setup-r@v2
2121
with:
@@ -27,5 +27,24 @@ jobs:
2727
needs: coverage
2828

2929
- name: Test coverage
30-
run: covr::codecov(quiet = FALSE)
30+
run: |
31+
covr::codecov(
32+
quiet = FALSE,
33+
clean = FALSE,
34+
install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package")
35+
)
3136
shell: Rscript {0}
37+
38+
- name: Show testthat output
39+
if: always()
40+
run: |
41+
## --------------------------------------------------------------------
42+
find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true
43+
shell: bash
44+
45+
- name: Upload test results
46+
if: failure()
47+
uses: actions/upload-artifact@v3
48+
with:
49+
name: coverage-test-failures
50+
path: ${{ runner.temp }}/package

DESCRIPTION

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@ License: MIT + file LICENSE
1515
URL: https://xml2.r-lib.org/, https://github.com/r-lib/xml2
1616
BugReports: https://github.com/r-lib/xml2/issues
1717
Depends:
18-
R (>= 3.1.0)
18+
R (>= 3.6.0)
1919
Imports:
20-
methods
20+
cli,
21+
glue,
22+
lifecycle,
23+
methods,
24+
rlang (>= 1.1.0),
25+
withr
2126
Suggests:
2227
covr,
2328
curl,
@@ -26,7 +31,7 @@ Suggests:
2631
magrittr,
2732
mockery,
2833
rmarkdown,
29-
testthat (>= 2.1.0)
34+
testthat (>= 3.0.0)
3035
VignetteBuilder:
3136
knitr
3237
Config/Needs/website: tidyverse/tidytemplate
@@ -40,15 +45,25 @@ Collate:
4045
'xml_parse.R'
4146
'as_xml_document.R'
4247
'classes.R'
48+
'format.R'
49+
'import-standalone-obj-type.R'
50+
'import-standalone-purrr.R'
51+
'import-standalone-types-check.R'
4352
'init.R'
53+
'nodeset_apply.R'
4454
'paths.R'
4555
'utils.R'
56+
'xml2-package.R'
4657
'xml_attr.R'
4758
'xml_children.R'
59+
'xml_document.R'
4860
'xml_find.R'
61+
'xml_missing.R'
4962
'xml_modify.R'
5063
'xml_name.R'
5164
'xml_namespaces.R'
65+
'xml_node.R'
66+
'xml_nodeset.R'
5267
'xml_path.R'
5368
'xml_schema.R'
5469
'xml_serialize.R'
@@ -58,3 +73,4 @@ Collate:
5873
'xml_url.R'
5974
'xml_write.R'
6075
'zzz.R'
76+
Config/testthat/edition: 3

NAMESPACE

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,5 +212,8 @@ exportClasses(xml_document)
212212
exportClasses(xml_missing)
213213
exportClasses(xml_node)
214214
exportClasses(xml_nodeset)
215+
import(rlang)
216+
importFrom(glue,glue)
217+
importFrom(lifecycle,deprecated)
215218
importFrom(methods,setOldClass)
216219
useDynLib(xml2, .registration = TRUE)

R/as_list.R

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,12 @@ as_list.xml_node <- function(x, ns = character(), ...) {
5252
# Base case - contents
5353
type <- xml_type(x)
5454

55-
if (type %in% c("text", "cdata"))
55+
if (type %in% c("text", "cdata")) {
5656
return(xml_text(x))
57-
if (type != "element" && type != "document")
57+
}
58+
if (type != "element" && type != "document") {
5859
return(paste("[", type, "]"))
60+
}
5961

6062
out <- list()
6163
} else {

R/as_xml_document.R

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@
1010
#' @export
1111
#' @examples
1212
# empty lists generate empty nodes
13-
#'as_xml_document(list(x = list()))
13+
#' as_xml_document(list(x = list()))
1414
#'
15-
#'# Nesting multiple nodes
16-
#'as_xml_document(list(foo = list(bar = list(baz = list()))))
15+
#' # Nesting multiple nodes
16+
#' as_xml_document(list(foo = list(bar = list(baz = list()))))
1717
#'
18-
#'# attributes are stored as R attributes
19-
#'as_xml_document(list(foo = structure(list(), id = "a")))
20-
#'as_xml_document(list(foo = list(
21-
#' bar = structure(list(), id = "a"),
22-
#' bar = structure(list(), id = "b"))))
18+
#' # attributes are stored as R attributes
19+
#' as_xml_document(list(foo = structure(list(), id = "a")))
20+
#' as_xml_document(list(foo = list(
21+
#' bar = structure(list(), id = "a"),
22+
#' bar = structure(list(), id = "b")
23+
#' )))
2324
as_xml_document <- function(x, ...) {
2425
UseMethod("as_xml_document")
2526
}
@@ -39,7 +40,7 @@ as_xml_document.response <- read_xml.response
3940
#' @export
4041
as_xml_document.list <- function(x, ...) {
4142
if (length(x) > 1) {
42-
stop("Root nodes must be of length 1", call. = FALSE)
43+
abort("Root nodes must be of length 1")
4344
}
4445

4546

0 commit comments

Comments
 (0)