What eslint rule impacts destructure format? - eslint

I just updated all my ESLint libraries. The only weird change I saw looked like this:
const {
checked,
unsupported,
onChange,
labelOverride,
disabledSpinner,
} = props;
-->
const { checked, unsupported, onChange, labelOverride, disabledSpinner } =
props;
Can someone let me know what rule would do this? I thought it might be object-curly-newline after searching, but I realized that rule is already set to off.

Related

Is there any function's result value must be used specifier In Typescript?

I want to specify that the function's return value must be used using typescript.
There is an attribute [[nodiscard]] in c++. Is there any similar attribute in Typescript?
Example:
function setSomeFields(someThing: MyClass) {
const other = new MyClass();
other.value = someThing.value;
//...
return other;
}
//...
// wanted: error or warning
setSomeFields(myClass);
// correct
const newMyClass = setSomeFields(myClass);
There was a discussion on eslint to for a no-unused-return-value rule that would give you the warning you want but a rule like that was never included. For now, the SonarJS plugin for eslint does seem to have such a rule.

populate object properties using lambda expression in typescript

Newbie Alert! I feel silly asking this question but I need someone to teach me the correct syntax.
I have code that looks like this:
let thing: INewThing;
thing.personId = another.personId;
thing.address = another.work.address;
thing.greades = another.subjectInfo.grades;
thing.isCurrent = another.student.isCurrent;
I know it can be written cleaner. I want to use a lamda expression, something like this:
let thing: INewThing => {
personId = another.personId,
address = another.work.address,
grades = another.subjectInfo.grades,
isCurrent = another.student.isCurrent
} as IThingUpdate;
I have looked and looked for an example. I have yet to find one that works for me. It's just syntax but no matter what I try it doesn't work.
You're just looking to create a new object, which is a pretty different thing from a "lambda" (function). Just declare the object. You don't need a function.
const thing = {
personId: another.personId,
address: another.work.address,
// use the correct spelling below - no 'greades'
grades: another.subjectInfo.grades,
isCurrent: another.student.isCurrent,
};
If the another is typed properly, that should be sufficient.
If the another object had more properties using the same path, another option would be to destructure those properties out, then declare the object with shorthand, eg:
const originalObj = { prop: 'val', nested: { foo: 'foo', bar: 'bar', unwanted: 'unwanted' } };
const { foo, bar } = originalObj.nested;
const thing = { foo, bar };
Destructuring like this, without putting the values into differently-named properties, helps reduce typos - if a property starts out, for example, as someLongPropertyName, putting it into a standalone identifier someLongPropertyName and then constructing an object with shorthand syntax ensures that the new object also has the exact property name someLongPropertyName (and not, for example, someLongPRopertyName - which isn't that uncommon of a mistake when using the more traditional object declaration format).
But since all the paths in your another object are different, this approach wouldn't work well in this particular situation.

How do I implement simple use-case[if/else] for some Intend in Dialogflow?

After taking some information from the user I want to return some text using those data. Like If/else statement. If this matches with this then I will return this. But I don't know where I can or how to implement this. Can anyone please help?
You want to look into writing that code using fulfillment, which is typically implemented using a webhook or Dialogflow's built-in editor. You might, for example, do something like this:
function languageHandler(agent) {
const language = agent.parameters.language;
const programmingLanguage = agent.parameters.ProgrammingLanguages;
if (language) {
agent.add("Wow! I didn't know you knew ${language}");
}
else if (programmingLanguage) {
agent.add("${programmingLanguage} is cool");
} else {
agent.add("What language do you know?")
}
}

Cancel "allman" brace-style when 'implicit-arrow-linebreak' is "beside"

I was looking at similar issues, but it seems my case is somewhat special.
I'm wanting to enforce the "allman" brace-style, but also want to set the implicit-arrow-linebreak to "beside", as pictured:
{
// ...
"rules": {
"brace-style": [2, "allman"],
"implicit-arrow-linebreak": [2, "as-beside"],
// ...
}
// ...
}
Now I have this snippet:
this.fetchMeta()
.then(metadata => {
this.meta = metadata;
this.initiateInterval();
}).catch(this.destroy);
The first error I get is regarding the brace-style, which I understand can be fixed by creating a newline. Trying to fix this causes this error, making the this keyword unavailable (which I need). Declaring this as self before-hand does not work.
How do I cancel out the "allman" brace-style when implicit-arrow-linebreak is set to "beside"?

Changing anyMatch default for Filter.JS in ExtJS for MultiSelect search

I have a multiselect bound to a store in which I implemented use of anyMatch: true to allow for True to allow any match - no regex start/end line anchors will be added (as per the comment in Filter.js). My problem is that I need to implement this as per the answer to multiselect-search-whole-string, in particular the solution provided in this fiddle https://fiddle.sencha.com/#fiddle/jf5
What I want to do is just set anyMatch: true, regardless, so I set it in Filter.js, but this has no effect on use of it. I searched the entire codebase for other instances of anyMatch: false and the only other one is in ext-all-debug.js. Why isn't setting these values having any effect? I don't see where else this default value could be set?
EDIT 1
I tried a different override, and while it is not exhibiting the right behavior, it is actually doing something this time. I figured that since the chunk of code that does work when embedded in the search attribute within the MultiSelector control was pretty much what was found in the MultiSelectorSearch's search method, that this was what I needed to focus on for the override. Any suggestions on tweaking this would be most welcome:
Ext.define('Ext.overrides.view.MultiSelectorSearch', {
override: 'Ext.view.MultiSelectorSearch',
search: function (text, me) {
var filter = me.searchFilter,
filters = me.getSearchStore().getFilters();
if (text) {
filters.beginUpdate();
if (filter) {
filter.setValue(text);
} else {
me.searchFilter = filter = new Ext.util.Filter({
id: 'search',
property: me.field,
value: text,
anyMatch: true
});
}
filters.add(filter);
filters.endUpdate();
} else if (filter) {
filters.remove(filter);
}
}
});
EDIT 2
Got it! The key was that originally, since this code was embedded in a singleton, I could reference the method by passing me from the calling form.panel. This did not work globally as an override, and required me to define the method as
search: function (text) {
var me = this,
I hope this helps someone out there!
Changing in ext-all-debug.js is not safe, when you do a production build this file will not get included.
Best way is to override the Filter class, here is how you can do it.
Ext.define('Ext.overrides.util.Filter', {
override: 'Ext.util.Filter',
anyMatch: true
});
And import this class in Application.js
Ext.require([
'Ext.overrides.util.Filter'
]);

Resources