Skip to content

src: remove icu based ToASCII and ToUnicode#55156

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
anonrig:remove-unused-functions
Oct 18, 2024
Merged

src: remove icu based ToASCII and ToUnicode#55156
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
anonrig:remove-unused-functions

Conversation

@anonrig
Copy link
Copy Markdown
Member

@anonrig anonrig commented Sep 28, 2024

We have been using Ada's ToASCII and ToUnicode implementations since Node 18. I think it's safe to assume we can remove this "unused" code.

@anonrig anonrig requested review from jasnell and lemire September 28, 2024 18:22
@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. i18n-api Issues and PRs related to the i18n implementation. needs-ci PRs that need a full CI run. labels Sep 28, 2024
@anonrig anonrig force-pushed the remove-unused-functions branch from 4e0a3da to a0a5680 Compare September 28, 2024 18:33
@codecov
Copy link
Copy Markdown

codecov Bot commented Sep 28, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 88.41%. Comparing base (0c68991) to head (41641f7).
Report is 8 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #55156   +/-   ##
=======================================
  Coverage   88.40%   88.41%           
=======================================
  Files         653      653           
  Lines      187597   187502   -95     
  Branches    36112    36097   -15     
=======================================
- Hits       165850   165781   -69     
+ Misses      14967    14961    -6     
+ Partials     6780     6760   -20     
Files with missing lines Coverage Δ
src/node_i18n.cc 73.74% <ø> (+0.67%) ⬆️
src/node_i18n.h 81.25% <ø> (ø)

... and 43 files with indirect coverage changes

@anonrig anonrig force-pushed the remove-unused-functions branch from a0a5680 to e59a0cc Compare September 29, 2024 00:22
@anonrig anonrig requested a review from KhafraDev September 29, 2024 00:23
Comment thread test/fixtures/url-idna.js
@anonrig anonrig force-pushed the remove-unused-functions branch from e59a0cc to 8e4ec9f Compare October 7, 2024 18:43
@anonrig anonrig requested a review from aduh95 October 7, 2024 19:10
@anonrig
Copy link
Copy Markdown
Member Author

anonrig commented Oct 7, 2024

cc @nodejs/cpp-reviewers can you review?

@anonrig anonrig added the request-ci Add this label to start a Jenkins CI on a PR. label Oct 7, 2024
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Oct 8, 2024
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@richardlau
Copy link
Copy Markdown
Member

This appears to have broken the build when Node.js is configured with --with-intl=small-icu.
e.g. https://ci.nodejs.org/job/node-test-commit-linux-containered/46896/nodes=ubuntu2204_sharedlibs_smallicu_x64/console

21:54:07 In file included from ../deps/icu-small/source/common/unicode/platform.h:25,
21:54:07                  from ../deps/icu-small/source/common/unicode/ptypes.h:46,
21:54:07                  from ../deps/icu-small/source/common/unicode/umachine.h:46,
21:54:07                  from ../deps/icu-small/source/common/unicode/utypes.h:38,
21:54:07                  from ../deps/icu-small/source/common/unicode/ucnv_err.h:88,
21:54:07                  from ../deps/icu-small/source/common/unicode/ucnv.h:51,
21:54:07                  from ../src/node_i18n.h:34,
21:54:07                  from ../src/node_i18n.cc:43:
21:54:07 ../src/node_i18n.cc: In function 'bool node::i18n::InitializeICUDirectory(const std::string&, std::string*)':
21:54:07 ../deps/icu-small/source/common/unicode/urename.h:900:54: error: 'udata_setCommonData_75' was not declared in this scope; did you mean 'udata_setCommonData'?
21:54:07   900 | #define udata_setCommonData U_ICU_ENTRY_POINT_RENAME(udata_setCommonData)
21:54:07       |                                                      ^~~~~~~~~~~~~~~~~~~
21:54:07 ../deps/icu-small/source/common/unicode/uvernum.h:121:50: note: in definition of macro 'U_DEF_ICU_ENTRY_POINT_RENAME'
21:54:07   121 | #       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
21:54:07       |                                                  ^
21:54:07 ../deps/icu-small/source/common/unicode/uvernum.h:123:47: note: in expansion of macro 'U_DEF2_ICU_ENTRY_POINT_RENAME'
21:54:07   123 | #       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
21:54:07       |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21:54:07 ../deps/icu-small/source/common/unicode/urename.h:900:29: note: in expansion of macro 'U_ICU_ENTRY_POINT_RENAME'
21:54:07   900 | #define udata_setCommonData U_ICU_ENTRY_POINT_RENAME(udata_setCommonData)
21:54:07       |                             ^~~~~~~~~~~~~~~~~~~~~~~~
21:54:07 ../src/node_i18n.cc:555:5: note: in expansion of macro 'udata_setCommonData'
21:54:07   555 |     udata_setCommonData(&SMALL_ICUDATA_ENTRY_POINT, &status);
21:54:07       |     ^~~~~~~~~~~~~~~~~~~
21:54:07 make[2]: *** [libnode.target.mk:527: /home/iojs/build/workspace/node-test-commit-linux-containered/out/Release/obj.target/libnode/src/node_i18n.o] Error 1

which is coming from the #ifdef NODE_HAVE_SMALL_ICU block in

node/src/node_i18n.cc

Lines 550 to 556 in 8e4ec9f

bool InitializeICUDirectory(const std::string& path, std::string* error) {
UErrorCode status = U_ZERO_ERROR;
if (path.empty()) {
#ifdef NODE_HAVE_SMALL_ICU
// install the 'small' data.
udata_setCommonData(&SMALL_ICUDATA_ENTRY_POINT, &status);
#else // !NODE_HAVE_SMALL_ICU

Copy link
Copy Markdown
Member

@mertcanaltin mertcanaltin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Copy link
Copy Markdown
Member

@lemire lemire left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wow

@anonrig anonrig force-pushed the remove-unused-functions branch from dee0c58 to 41641f7 Compare October 18, 2024 00:54
@anonrig anonrig added the commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. label Oct 18, 2024
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@richardlau richardlau added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Oct 18, 2024
@anonrig anonrig added the commit-queue Add this label to land a pull request using GitHub Actions. label Oct 18, 2024
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Oct 18, 2024
@nodejs-github-bot nodejs-github-bot merged commit 9f5000e into nodejs:main Oct 18, 2024
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

Landed in 9f5000e

aduh95 pushed a commit that referenced this pull request Oct 19, 2024
PR-URL: #55156
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Reviewed-By: Daniel Lemire <daniel@lemire.me>
Reviewed-By: Richard Lau <rlau@redhat.com>
@aduh95 aduh95 mentioned this pull request Oct 24, 2024
louwers pushed a commit to louwers/node that referenced this pull request Nov 2, 2024
PR-URL: nodejs#55156
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Reviewed-By: Daniel Lemire <daniel@lemire.me>
Reviewed-By: Richard Lau <rlau@redhat.com>
tpoisseau pushed a commit to tpoisseau/node that referenced this pull request Nov 21, 2024
PR-URL: nodejs#55156
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Reviewed-By: Daniel Lemire <daniel@lemire.me>
Reviewed-By: Richard Lau <rlau@redhat.com>
ruyadorno pushed a commit that referenced this pull request Nov 27, 2024
PR-URL: #55156
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
Reviewed-By: Daniel Lemire <daniel@lemire.me>
Reviewed-By: Richard Lau <rlau@redhat.com>
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Dec 5, 2024
:warning: **CAUTION: this is a major update, indicating a breaking change!** :warning:

This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | major | `20.18.1` -> `22.12.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v22.12.0`](https://github.com/nodejs/node/releases/tag/v22.12.0): 2024-12-03, Version 22.12.0 &#x27;Jod&#x27; (LTS), @&#8203;ruyadorno

[Compare Source](https://github.com/nodejs/node/compare/v22.11.0...v22.12.0)

##### Notable Changes

##### require(esm) is now enabled by default

Support for loading native ES modules using require() had been available on v20.x and v22.x under the command line flag --experimental-require-module, and available by default on v23.x. In this release, it is now no longer behind a flag on v22.x.

This feature is still experimental, and we are looking for user feedback to make more final tweaks before fully stabilizing it. For this reason, on v22.x, when the Node.js instance encounters a native ES module in require() for the first time, it will emit an experimental warning unless `require()` comes from a path that contains `node_modules`. If there happens to be any regressions caused by this feature, users can report it to the Node.js issue tracker. Meanwhile this feature can also be disabled using `--no-experimental-require-module` as a workaround.

With this feature enabled, Node.js will no longer throw `ERR_REQUIRE_ESM` if `require()` is used to load a ES module. It can, however, throw `ERR_REQUIRE_ASYNC_MODULE` if the ES module being loaded or its dependencies contain top-level `await`. When the ES module is loaded successfully by `require()`, the returned object will either be a ES module namespace object similar to what's returned by `import()`, or what gets exported as `"module.exports"` in the ES module.

Users can check `process.features.require_module` to see whether `require(esm)` is enabled in the current Node.js instance. For packages, the `"module-sync"` exports condition can be used as a way to detect `require(esm)` support in the current Node.js instance and allow both `require()` and `import` to load the same native ES module. See [the documentation](https://nodejs.org/docs/latest/api/modules.html#loading-ecmascript-modules-using-require) for more details about this feature.

Contributed by Joyee Cheung in [#&#8203;55085](https://github.com/nodejs/node/pull/55085)

##### Added resizable `ArrayBuffer` support in `Buffer`

When a `Buffer` is created using a resizable `ArrayBuffer`, the `Buffer` length will now correctly change as the underlying `ArrayBuffer` size is changed.

```js
const ab = new ArrayBuffer(10, { maxByteLength: 20 });
const buffer = Buffer.from(ab);
console.log(buffer.byteLength); 10
ab.resize(15);
console.log(buffer.byteLength); 15
ab.resize(5);
console.log(buffer.byteLength); 5
```

Contributed by James Snell in [#&#8203;55377](https://github.com/nodejs/node/pull/55377)

##### Update root certificates to NSS 3.104

This is the version of NSS that shipped in Firefox 131.0 on 2024-10-01.

Certificates added:

-   FIRMAPROFESIONAL CA ROOT-A WEB
-   TWCA CYBER Root CA
-   SecureSign Root CA12
-   SecureSign Root CA14
-   SecureSign Root CA15

Contributed by Richard Lau in [#&#8203;55681](https://github.com/nodejs/node/pull/55681)

##### Other Notable Changes

-   \[[`4920869935`](https://github.com/nodejs/node/commit/4920869935)] - **(SEMVER-MINOR)** **assert**: make assertion_error use Myers diff algorithm (Giovanni Bucci) [#&#8203;54862](https://github.com/nodejs/node/pull/54862)
-   \[[`ccffd3b819`](https://github.com/nodejs/node/commit/ccffd3b819)] - **doc**: enforce strict policy to semver-major releases (Rafael Gonzaga) [#&#8203;55732](https://github.com/nodejs/node/pull/55732)
-   \[[`acc6806900`](https://github.com/nodejs/node/commit/acc6806900)] - **doc**: add jazelly to collaborators (Jason Zhang) [#&#8203;55531](https://github.com/nodejs/node/pull/55531)
-   \[[`88d91e8bc2`](https://github.com/nodejs/node/commit/88d91e8bc2)] - **esm**: mark import attributes and JSON module as stable (Nicolò Ribaudo) [#&#8203;55333](https://github.com/nodejs/node/pull/55333)
-   \[[`98bfc7dc