Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stream: name anonymous functions #9130

Closed
wants to merge 2 commits into from

Conversation

maasencioh
Copy link
Contributor

@maasencioh maasencioh commented Oct 17, 2016

Checklist
  • make -j8 test
  • commit message follows commit guidelines
Description of change

Ref: #8913

For some callbacks I made a change to arrow funtions and for _stream_readable there was a change in Readable.prototype.wrap that I would like some opinions because I'm not sure if it's going to work as spected

@nodejs-github-bot nodejs-github-bot added the lib / src Issues and PRs related to general changes in the lib or src directory. label Oct 17, 2016
@mscdex mscdex added stream Issues and PRs related to the stream subsystem. and removed lib / src Issues and PRs related to general changes in the lib or src directory. labels Oct 17, 2016
@@ -50,7 +50,7 @@ util.inherits(Transform, Duplex);


function TransformState(stream) {
this.afterTransform = function(er, data) {
this.afterTransform = function _afterTransform(er, data) {
Copy link
Member

Choose a reason for hiding this comment

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

Why add the _ prefix?

Copy link
Member

Choose a reason for hiding this comment

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

This is to avoid conflict with afterTransform that is called on next line.

@@ -16,26 +16,26 @@ function StreamWrap(stream) {
this._list = null;

const self = this;
handle.close = function(cb) {
handle.close = (cb) => {
debug('close');
self.doClose(cb);
Copy link
Member

Choose a reason for hiding this comment

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

since these are being changed to arrow functions, the self can be switched to this

Copy link
Contributor Author

Choose a reason for hiding this comment

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

oups, you're right, thanks

@@ -714,7 +714,7 @@ function nReadingNextTick(self) {

// pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.
Readable.prototype.resume = function() {
Readable.prototype.resume = function Readable_resume() {
Copy link
Member

Choose a reason for hiding this comment

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

Maybe use a camel case name like readableResume ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I was thinking to change it to _resume, in order to be consistent

@@ -50,7 +50,7 @@ util.inherits(Transform, Duplex);


function TransformState(stream) {
this.afterTransform = function(er, data) {
this.afterTransform = function _afterTransform(er, data) {
Copy link
Member

Choose a reason for hiding this comment

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

This is to avoid conflict with afterTransform that is called on next line.

@lpinca
Copy link
Member

lpinca commented Oct 17, 2016

I wonder if some of these changes, like _afterTransform, conflict with #9113.

@maasencioh
Copy link
Contributor Author

@lpinca I just look at those and we both change _stream_wrap.js but in different lines, so it shouldn't conflict, but thank for pointing it out, I didn't review other PRs

@lpinca
Copy link
Member

lpinca commented Oct 17, 2016

@maasencioh my bad, I thought #9113 was proposing an eslint rule to check if names matched. Ignore me.

@maasencioh maasencioh force-pushed the name_stream branch 3 times, most recently from 2d4565b to 5a04861 Compare October 18, 2016 13:31
@maasencioh
Copy link
Contributor Author

maasencioh commented Oct 18, 2016

@jasnell not all the self were removed, because in some cases the arrow funtion was inside a regular function, I run the tests and everithing it's currently passing

@rvagg rvagg force-pushed the master branch 2 times, most recently from c133999 to 83c7a88 Compare October 18, 2016 17:02
@@ -714,7 +714,7 @@ function nReadingNextTick(self) {

// pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.
Readable.prototype.resume = function() {
Readable.prototype.resume = function _resume() {
Copy link
Member

Choose a reason for hiding this comment

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

Maybe call this one resume and rename the local function to resumeReadable ?

Copy link
Member

@jasnell jasnell left a comment

Choose a reason for hiding this comment

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

LGTM if CI is green

targos
targos previously approved these changes Oct 24, 2016
@targos
Copy link
Member

targos commented Oct 24, 2016

@maasencioh
Copy link
Contributor Author

I'm not sure that the CI failures are related to the changes

@maasencioh
Copy link
Contributor Author

@jasnell sorry it's anything else needed in this PR?

Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

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

Some nits.

handle.onwrite = function(req, bufs) {
return self.doWrite(req, bufs);
handle.onwrite = (req, bufs) => {
return this.doWrite(req, bufs);
};
Copy link
Member

Choose a reason for hiding this comment

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

Can you please revert all of those to function and name them?

// Ensure that write was dispatched
setImmediate(function() {
setImmediate(() => {
Copy link
Member

Choose a reason for hiding this comment

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

can you please name this one?

self.stream.write(buf, done);
this.stream.cork();
bufs.forEach((buf) => {
this.stream.write(buf, done);
});
Copy link
Member

Choose a reason for hiding this comment

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

can you please convert this forEach in a for loop, it can probably save us a couple of ticks.

@@ -131,7 +131,7 @@ StreamWrap.prototype.doWrite = function doWrite(req, bufs) {
pending = 0;

// Ensure that write was dispatched
setImmediate(function() {
setImmediate(() => {
Copy link
Member

Choose a reason for hiding this comment

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

can you please name this?

setImmediate(function() {
while (self._list !== null) {
const item = self._list;
setImmediate(() => {
Copy link
Member

Choose a reason for hiding this comment

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

this should be named as well, also can you make this function top level, so that the for loop under can be optimized.

@mcollina
Copy link
Member

@maasencioh would you mind addressing the comments above? We can land this!

@mcollina mcollina added the stalled Issues and PRs that are stalled. label Jan 26, 2017
@maasencioh
Copy link
Contributor Author

Hello @mcollina, I thought that this was forgotten, but here I just added the new nits

@@ -613,7 +613,7 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
};

function pipeOnDrain(src) {
return function() {
return () => {
Copy link
Contributor

Choose a reason for hiding this comment

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

Why not name this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

sorry I miss that one, I'll check on the other ones

var state = this._readableState;
var paused = false;

var self = this;
stream.on('end', function() {
stream.on('end', function end() {
Copy link
Contributor

Choose a reason for hiding this comment

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

Feel free to ignore, but I prefer naming handlers like onEnd, onData, etc.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I wasn't sure which name could be more useful, so this comments are great, thanks

@mcollina mcollina removed the stalled Issues and PRs that are stalled. label Jan 29, 2017
Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

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

A couple of nits and we are good to go.

Can you squash the commits as well?

if (realHasInstance.call(this, object))
return true;

return object && object._writableState instanceof WritableState;
}
});
} else {
realHasInstance = function(object) {
realHasInstance = function realHasInstance(object) {
Copy link
Member

Choose a reason for hiding this comment

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

can this have a different name? Like _hasInstancePolyfill?

@@ -134,15 +134,15 @@ var realHasInstance;
if (typeof Symbol === 'function' && Symbol.hasInstance) {
realHasInstance = Function.prototype[Symbol.hasInstance];
Object.defineProperty(Writable, Symbol.hasInstance, {
value: function(object) {
value: function value(object) {
Copy link
Member

Choose a reason for hiding this comment

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

can we name this writableHasInstance?

@maasencioh
Copy link
Contributor Author

how does it looks now @mcollina?

while (self._list !== null) {
const item = self._list;
const req = item.req;
self._dequeue(item);
this._dequeue(item);
Copy link
Member

Choose a reason for hiding this comment

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

are you sure you can use this here?


setImmediate(function() {
function setImmediateDoClose () {
while (self._list !== null) {
Copy link
Member

Choose a reason for hiding this comment

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

self is not defined anymore in this function.

// Do not invoke callback twice
if (!self._dequeue(item))
if (!this._dequeue(item))
Copy link
Member

Choose a reason for hiding this comment

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

why this?

debug('close');
self.doClose(cb);
this.doClose(cb);
Copy link
Member

Choose a reason for hiding this comment

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

can you please revert this to self?

@mcollina
Copy link
Member

@mcollina
Copy link
Member

@maasencioh can you swash all the streams commit into one? I think it'd be easier to move around.

@maasencioh
Copy link
Contributor Author

@mcollina I took my time to make it completely like it should be, I changed everything, but I hope that all it's correct now

@@ -120,7 +120,7 @@ function Readable(options) {
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function(chunk, encoding) {
Readable.prototype.push = function readablePush (chunk, encoding) {
Copy link
Member

Choose a reason for hiding this comment

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

I think the norm is to omit the space after the function name.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@TimothyGu any tip to run the linter and test only on this files? thanks

state.length === 0);
(state.needReadable ||
state.length < state.highWaterMark ||
state.length === 0);
Copy link
Member

Choose a reason for hiding this comment

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

Can you restore these spaces?

@maasencioh
Copy link
Contributor Author

@mcollina what do you think now? any tip to run the linter and test only on this files? thanks

@targos
Copy link
Member

targos commented Feb 21, 2017

@maasencioh run make jslint to run the linter. It will check all files the first time but the results are cached so subsequent runs should only check modified files.

@mcollina
Copy link
Member

LGTM if ci is green.

@maasencioh
Copy link
Contributor Author

@jasnell @mcollina @targos could you please help me whith this doubt?

I renamed a function as proposed like this:

Object.defineProperty(Writable, Symbol.hasInstance, {
  value: function writableHasInstance(object) {
    if (realHasInstance.call(this, object))
      return true;

    return object && object._writableState instanceof WritableState;
  }
});

But currently this throws a jslint error

137:5  error  Function name `writableHasInstance` should match property name `value`             func-name-matching

Should I follow the func-name-matching rule? because this will force me to rename several functions to avoid conflicts

@mcollina
Copy link
Member

@maasencioh I think you can go ahead and leave that function anonymous.

@TimothyGu
Copy link
Member

@maasencioh, alternatively, you can use an ESLint annotation to suppress that error. See this example in lib/internal/url.js.

@jasnell jasnell added the stalled Issues and PRs that are stalled. label Mar 24, 2017
@fhinkel
Copy link
Member

fhinkel commented May 26, 2017

There hasn't been any activity here. I'm closing this. Feel free to reopen (or ping a collaborator) if I closed this in error.

@fhinkel fhinkel closed this May 26, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stalled Issues and PRs that are stalled. stream Issues and PRs related to the stream subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants