errors, buffer: Migrate buffer errors to use internal/errors#13976
errors, buffer: Migrate buffer errors to use internal/errors#13976refack merged 1 commit intonodejs:masterfrom
Conversation
lib/buffer.js
Outdated
There was a problem hiding this comment.
I believe these should be passed parameters which provide info about the arg and expected type as opposed to a fixed string. See invalidArgType(name, expected, actual) in internal/errors.js
There was a problem hiding this comment.
Agreed.
I think invalidArgType(name, expected, actual) is unsuitable for all situations. Because "Invalid argument type" can caused by many reasons:
- Argument must be one or more specified type, but recieve other.
- Argument must NOT be one or more specified type, but recieve.
- In some specified condition, the above two happen.
But invalidArgType(name, expected, actual) in internal/errors.js can only handle the first one, without concerning about the rest.
Should I extend the invalidArgType method in order to make it suitable for all situations?
lib/buffer.js
Outdated
lib/buffer.js
Outdated
lib/buffer.js
Outdated
lib/buffer.js
Outdated
There was a problem hiding this comment.
I think this should be passed arguments that provide info about the expected argument as opposed to a specific string. Look at the function associated with ERR_INVALID_ARG_TYPE in internal/errors.js. Same comment applies to everywhere ERR_INVALID_ARG_TYPE is used.
lib/buffer.js
Outdated
There was a problem hiding this comment.
This is probably a good candidate for adding a function that takes info about the arguments and the expected range as opposed to using a fixed string.
cd92a68 to
735590b
Compare
doc/api/errors.md
Outdated
There was a problem hiding this comment.
To avoid confusion, perhaps ERR_NO_LONGER_SUPPORTED would be better here. The method itself is not deprecated, only one particular way of calling it.
07afe26 to
1778514
Compare
test/parallel/test-buffer-from.js
Outdated
There was a problem hiding this comment.
This needs to be updated to be a common.expectsError()
test/common/index.js
Outdated
There was a problem hiding this comment.
Would this work is these were just strings?
There was a problem hiding this comment.
It works, but I'm updating it to use common.expectsError.
lib/internal/errors.js
Outdated
There was a problem hiding this comment.
I'm not convinced this is not overkill... For example https://github.com/nodejs/node/blob/master/lib/readline.js#L109
Can you try and find any more places where it's useful?
Otherwise a simpler error message should be enough.
doc/api/errors.md
Outdated
There was a problem hiding this comment.
Used when a Node.js API in called in an unsupported manner.
For example: `Buffer.write(string, encoding, offset[, length])`ed482e1 to
512cb57
Compare
lib/buffer.js
Outdated
There was a problem hiding this comment.
I don't know if this error code is suitable.
Should we have a new error code for it?
There was a problem hiding this comment.
It should probably be a RangeError
|
Now all the errors in buffer module have been migrated into internal/errors. |
lib/buffer.js
Outdated
There was a problem hiding this comment.
This should be the name of the argument as opposed to 'first argument'
There was a problem hiding this comment.
Sames goes for other similar instances.
There was a problem hiding this comment.
Since this is checking for the https://nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding case first argument -> string
lib/buffer.js
Outdated
There was a problem hiding this comment.
What does the string end up being here ? I think this may be the first case were we have the 'not' cases versus listing out what it should be.
There was a problem hiding this comment.
I extended the invalidArgType(name, expected, actual) in internal/errors.js to make it adapt to the 'not' cases. See here.
The case here will end up being:
TypeError [ERR_INVALID_ARG_TYPE]: The "value" argument must not be of type number. Received type number
The tests for it is also changed.
lib/buffer.js
Outdated
There was a problem hiding this comment.
I think it should likely be 'string encoding'
There was a problem hiding this comment.
In other places UNKNOWN_ENCODING so that should be used here as well.
There was a problem hiding this comment.
but IMHO name should stay encoding like in the doc - https://nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
There was a problem hiding this comment.
I think UNKNOWN_ENCODING is more suitable for this.
lib/buffer.js
Outdated
There was a problem hiding this comment.
This does not quite fit with the new approach. It really should be one of 'a' or 'b' instead of 'arguments'. I think we may need to different cases one that throws an error for 'a' and one for 'b' to be consistent with how we through errors everywhere else. To match that the second string passed in should be the name of the argument defined in the function definition that is wrong.
There was a problem hiding this comment.
IMHO it should be buf1 and buf2 alike in the API docs https://nodejs.org/api/buffer.html#buffer_class_method_buffer_compare_buf1_buf2
lib/buffer.js
Outdated
There was a problem hiding this comment.
same comment here as before, probably need to check for all cases that the second string matches the name of the argument that was invalid.
There was a problem hiding this comment.
|
This turns out to be one of the more challenging ones to convert, thanks for the work so far. A few more comments. |
doc/api/errors.md
Outdated
lib/buffer.js
Outdated
There was a problem hiding this comment.
Since this is checking for the https://nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding case first argument -> string
lib/buffer.js
Outdated
There was a problem hiding this comment.
but IMHO name should stay encoding like in the doc - https://nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
test/common/index.js
Outdated
There was a problem hiding this comment.
Could you replace .* with [^"]* just to be more explicit
(and at L65 too)
Since common is becoming a Winnebago, I'm actually not in love with these two. The old one is reused 3 times, and the new one 2 times.
Maybe for your next PR you could inline them 😉
|
@starkwang this is really good work. I would approve after you address the comments. Optionally if you have some more patience to replace all the |
dd2bdc4 to
7c28ac2
Compare
|
Pushed commit to address comments. |
4a6cd45 to
ac9dc54
Compare
|
It seems like the CI failed after merged to the master. |
test/common/index.js
Outdated
There was a problem hiding this comment.
This doesn't lint:
not ok 3 - /usr/home/iojs/build/workspace/node-test-linter/test/common/index.js
---
message: Missing semicolon.
severity: error
data:
line: 717
column: 2
ruleId: semi
...
Simplest thing is to restore the previous code
There was a problem hiding this comment.
Oops, I forget make lint to check it.
Stupid mistake
ac9dc54 to
4035559
Compare
4035559 to
bcde08c
Compare
|
Killed https://ci.nodejs.org/job/node-test-commit-arm/10847/nodes=armv7-wheezy/ after it had a few test fails, and there are others as well (12 in total): |
bcde08c to
0b2a6cb
Compare
|
Just help thing along I rebased and added the missing call count in the tests |
|
Full CI: https://ci.nodejs.org/job/node-test-pull-request/9095/ CI is ✔️ (except for known unrelated issues) |
PR-URL: nodejs#13976 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
0b2a6cb to
dbfe8c4
Compare
|
@refack Thank you for your continued support! :D |
This project progresses by the efforts of contributors such as yourself (Collaborators are here mostly to support that)! |
Migrate buffer errors to use internal/errors.
Ref: #11273
Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passesAffected core subsystem(s)
buffer, errors