My responses are inline below.

Thanks for putting this together. A few thoughts and questions below.
>
> If I'm reading this right, the necessity of putting the ruleset name in 
> the config file is so that ESLint know which directory to look for the 
> custom rules, is that correct?
>

This is correct. I think it also provides context around which rules are 
coming from which set.

With regards to configuration, I'm assuming that the custom ruleset has 
> default configuration in its eslint.json file that will automatically be 
> picked up when the ruleset is loaded?
>

Yes, that was my thought. So if you specify in your .eslintrc file 
something like:

{
    "ians-rules": "default" (not sure what this value should be.)
}

It would just load the default configuration.

Should rulesets be installed locally (per project) or globally (for all 
> projects)? I can see arguments going both ways.
>

I think they should be local. I see there being rulesets for various JS 
frameworks (Backbone, Ember, Angular), which will vary from project to 
project. I also think by design, ESLint core is meant to contain the most 
broad rules, therefore custom rulesets will most likely contain very 
granular, specific (possibly project-specific) rules and that, to me, 
signals that these rulesets should be local.

Should custom rules be grouped in with the regular rules rather than in a 
> separate area defined by ruleset name?
>

I'm not opposed to this. I think it's definitely cleaner than separating 
them, however, you do lose a bit of context around where the rules are 
coming from. If you prefer this, let's do this.
 

> Would it makes sense to decouple the ruleset configuration of rules from 
> the loading of rulesets? For instance, maybe we should have a "rulesets" 
> key that is an array where you can put "rulesets": ["ians-rules"].
>

If we go the direction that you imply in the previous question, then yes. 
Another thought that has occurred to me is that if we enforce an naming 
convention for rulesets (i.e. eslint-ruleset-mycoolrules) we can scan the 
node_modules directory looking for that naming convention and auto-load the 
rules. Users would then just need to add in the rule keys to their 
.eslintrc.
 

> These are just off the top of my head, thanks for putting in the work for 
> this.
>
> -N
>  
>
>
> On Mon, Dec 23, 2013 at 2:44 PM, Ian Christian Myers 
> <[email protected]<javascript:>
> > wrote:
>
>> My responses are inline below. Hopefully this clarifies a few things.
>>
>>
>> A few comments.. I'm not sure how this will work for the following 
>> scenarios:
>>
>> * I'm creating a new package, and would like to include eslint as a 
>> default linter. I would also like to get some custom rules working (My 
>> understanding is that I would just include custom rules into package.json 
>> in this case)
>>
>>
>> If you are creating a new project and want to get eslint and a custom 
>> rule set working you would:
>>
>> * npm install -g eslint (if you haven’t already done so)
>> * npm install eslint-custom-ruleset —save-dev
>> * Create your .eslintrc file. (side note: eslint CLI could have a command 
>> to copy the default eslint.json to .eslintrc OR another yeoman generator 
>> could do something similar)
>> * Add the custom rules to your .eslintrc file under the custom rule set’s 
>> key, like so:
>>
>> “rules”: {
>> ...
>> },
>> “custom-ruleset-name”: {
>>  “custom-rule”: 2
>> }
>>
>>
>> * I'm creating a new package that relies on the package that uses eslint 
>> and custom rules. I would like to use that installation of eslint with 
>> custom rules, can I do that?
>>
>>
>> I’m not sure I understand this scenario. What I think you’re asking is 
>> this: I’m creating ian-project, which relies on ilya-project. ilya-project 
>> uses eslint and a few custom rule sets. Can ian-project use ilya-project’s 
>> installation of eslint and the custom rule sets? Under the current 
>> proposal, no. ian-project would need to have to list and install its 
>> dependencies, and configure eslint and the rules separately. 
>>
>> * I'm writing client-side code and would just like to use eslint + custom 
>> rules. I installed eslint globally, where do I do npm install custom-rules 
>> from?
>>
>>
>> If you npm install <custom-ruleset-name> it will install to the 
>> node_modules directory. Once you’ve added these rules to your .eslintrc 
>> file, it will be eslint’s responsibility to find and load them from the 
>> node_modules directory.
>>
>> Also, my other concern is that this method requires modification of 
>> eslint.config or .eslintrc file every time I add a new set of rules. It's 
>> not a huge problem, but it would be nice if I could instead have a set or 
>> rules an eslint.config file that would be merged into main eslint.config on 
>> execution. Maybe when executing eslint, I would pass all of the configs in.
>>
>>
>> I prefer to have all of my rule configurations in one place, but if it 
>> seems like most people want to have separate configuration files, that 
>> could fit with this proposal fairly well.
>>
>> Thanks,
>>
>> Ilya Volodin
>>
>>
>> Thanks for taking the time to give feedback.
>>
>> Best,
>>
>> Ian
>>
>>
>> On Monday, December 23, 2013 4:51:14 PM UTC-5, Ian Christian Myers wrote:
>>
>>> Here’s a rough, high-level proposal for how we could approach 
>>> incorporating custom rule sets. I would love feedback on whether this is 
>>> the right direction and, if it is, how it can be improved: 
>>>
>>> https://github.com/nzakas/eslint/wiki/Custom-ESLint-Rule-Sets
>>>
>>> Best,
>>>
>>> Ian
>>>
>>> On Dec 23, 2013, at 8:34 AM, Ian Christian Myers <[email protected]> 
>>> wrote:
>>>
>>> Yes! I'll give it a look and see what I can come up with. 
>>>
>>> -Ian
>>> —
>>> Sent from Mailbox <https://www.dropbox.com/mailbox> for iPhone
>>>
>>>
>>> On Mon, Dec 23, 2013 at 8:15 AM, Nicholas Zakas <
>>> [email protected]> wrote:
>>>
>>>> I agree - that's not fully thought out yet. I'd like to look at how 
>>>> Yeoman allows you to create generators as a starting point for a model of 
>>>> sharing rulesets. Do you want to take a look and come up with a proposal 
>>>> for doing so?
>>>>
>>>> -N
>>>>  
>>>>
>>>> On Mon, Dec 23, 2013 at 8:10 AM, Ian Christian Myers <
>>>> [email protected]> wrote:
>>>>
>>>>> I've been thinking about this topic recently as well. In addition to 
>>>>> improving the development infrastructure in the ESLint community, I think 
>>>>> we also need to figure out a better way to plug in custom rule sets and 
>>>>> keep them up to date. Right now, the process seems to be checkout a rule 
>>>>> set, add the keys to .eslintrc, point eslint at those rules. But what 
>>>>> happens when I'm using 2 custom rule sets? 3? It can get messy quickly.
>>>>>
>>>>> Best,
>>>>>
>>>>> Ian
>>>>> —
>>>>> Sent from Mailbox <https://www.dropbox.com/mailbox> for iPhone
>>>>>
>>>>>
>>>>> On Mon, Dec 23, 2013 at 7:59 AM, Nicholas Zakas <
>>>>> [email protected]> wrote:
>>>>>
>>>>>>  Hi all,
>>>>>>
>>>>>> Some thoughts I wanted to share. In thinking about how to move ESLint 
>>>>>> forward in 2014, I had some ideas I wanted to share.
>>>>>>
>>>>>> I'm hoping and anticipating that people will create custom rulesets 
>>>>>> that they will want to share. I can envision people using GitHub to put 
>>>>>> these rulesets into repos that are shared by others. I also imagine that 
>>>>>> these repos would be setup similar to the main ESLint repo, with rules 
>>>>>> and 
>>>>>> tests for those rules. That also means the workflow for these repos 
>>>>>> would 
>>>>>> be similar to those of creating new rules for ESLint itself.
>>>>>>
>>>>>> I can also envision similar things for formatters (we're already 
>>>>>> seeing a bit of that).
>>>>>>
>>>>>> So, what do we need to do enable this use case and make things more 
>>>>>> efficient? Here's what I have in mind:
>>>>>>
>>>>>> 1) Separate out ESLint Tester into its own npm package. That way, 
>>>>>> it's easy for custom rulesets to use it to write tests.
>>>>>> 2) Create a Yeoman generator that will scaffold out rules and 
>>>>>> formatters, as well as rulesets, including appropriate test and 
>>>>>> documentation stubs.
>>>>>> 3) Create an ESLint organization on GitHub under which these three 
>>>>>> projects (including the main ESLint repo) are located.
>>>>>>
>>>>>> I think this will make ESLint easier to use and, hopefully, encourage 
>>>>>> more people to participate in its development.
>>>>>>
>>>>>> Thoughts?
>>>>>>
>>>>>>
>>>>>>  
>>>>>>
>>>>>> -- 
>>>>>>
>>>>>> ______________________________
>>>>>> Nicholas C. Zakas
>>>>>> @slicknet
>>>>>>
>>>>>> Author, Professional JavaScript for Web Developers
>>>>>> Buy it at Amazon.com <http://amazon.com/>: http://www.amazon.com/
>>>>>> Professional-JavaScript-Developers-Nicholas-Zakas/dp/
>>>>>> 1118026691/ref=sr_1_3 
>>>>>>
>>>>>>  -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "ESLint" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>  
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "ESLint" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>  
>>>>
>>>>
>>>> -- 
>>>>
>>>> ______________________________
>>>> Nicholas C. Zakas
>>>> @slicknet
>>>>
>>>> Author, Professional JavaScript for Web Developers
>>>> Buy it at Amazon.com <http://amazon.com/>: http://www.amazon.com/
>>>> Professional-JavaScript-Developers-Nicholas-Zakas/dp/
>>>> 1118026691/ref=sr_1_3 
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "ESLint" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>>
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ESLint" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ESLint" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
>
> -- 
>
> ______________________________
> Nicholas C. Zakas
> @slicknet
>
> Author, Professional JavaScript for Web Developers
> Buy it at Amazon.com: 
> http://www.amazon.com/Professional-JavaScript-Developers-Nicholas-Zakas/dp/1118026691/ref=sr_1_3
>  
>

-- 
You received this message because you are subscribed to the Google Groups 
"ESLint" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to