279 lines
18 KiB
JavaScript
279 lines
18 KiB
JavaScript
'use strict';
|
|
|
|
var rule = require('../rules/func-params-comma-dangle');
|
|
var RuleTester = require('eslint').RuleTester;
|
|
|
|
var MISSING_I = [{message: 'Missing trailing comma.', type: 'Identifier'}];
|
|
var MISSING_AP = [{message: 'Missing trailing comma.', type: 'AssignmentPattern'}];
|
|
var MISSING_SE = [{message: 'Missing trailing comma.', type: 'SpreadElement'}];
|
|
var UNEXPECTED_I = [{message: 'Unexpected trailing comma.', type: 'Identifier'}];
|
|
var UNEXPECTED_AP = [{message: 'Unexpected trailing comma.', type: 'AssignmentPattern'}];
|
|
var UNEXPECTED_SE = [{message: 'Unexpected trailing comma.', type: 'SpreadElement'}];
|
|
|
|
var ruleTester = new RuleTester({parser: 'babel-eslint'});
|
|
ruleTester.run('func-params-comma-dangle', rule, {
|
|
valid: [
|
|
{code: 'function f() {}'},
|
|
{code: 'function f(\n) {}'},
|
|
{code: 'function f(...a) {}'},
|
|
{code: 'function f(...a\n) {}'},
|
|
|
|
{code: 'f()'},
|
|
{code: 'f(\n)'},
|
|
|
|
{code: 'new F()'},
|
|
{code: 'new F(\n)'},
|
|
|
|
// FunctionDeclaration
|
|
{code: 'function f(a) {}', options: ['always-multiline']},
|
|
{code: 'function f(a) {}', options: ['never']},
|
|
{code: 'function f(a) {}', options: ['only-multiline']},
|
|
{code: 'function f(a,) {}', options: ['always']},
|
|
{code: 'function f(a,\n) {}', options: ['always']},
|
|
{code: 'function f(a,\n) {}', options: ['always-multiline']},
|
|
{code: 'function f(a,\n) {}', options: ['only-multiline']},
|
|
{code: 'function f(a\n) {}', options: ['never']},
|
|
{code: 'function f(a\n) {}', options: ['only-multiline']},
|
|
|
|
{code: 'function f(a=1) {}', options: ['always-multiline']},
|
|
{code: 'function f(a=1) {}', options: ['never']},
|
|
{code: 'function f(a=1) {}', options: ['only-multiline']},
|
|
{code: 'function f(a=1,) {}', options: ['always']},
|
|
{code: 'function f(a=1,\n) {}', options: ['always']},
|
|
{code: 'function f(a=1,\n) {}', options: ['always-multiline']},
|
|
{code: 'function f(a=1,\n) {}', options: ['only-multiline']},
|
|
{code: 'function f(a=1\n) {}', options: ['never']},
|
|
{code: 'function f(a=1\n) {}', options: ['only-multiline']},
|
|
|
|
{code: 'function f(a:T) {}', options: ['always-multiline']},
|
|
{code: 'function f(a:T) {}', options: ['never']},
|
|
{code: 'function f(a:T) {}', options: ['only-multiline']},
|
|
{code: 'function f(a:T,) {}', options: ['always']},
|
|
{code: 'function f(a:T,\n) {}', options: ['always']},
|
|
{code: 'function f(a:T,\n) {}', options: ['always-multiline']},
|
|
{code: 'function f(a:T,\n) {}', options: ['only-multiline']},
|
|
{code: 'function f(a:T\n) {}', options: ['never']},
|
|
{code: 'function f(a:T\n) {}', options: ['only-multiline']},
|
|
|
|
// FunctionExpression
|
|
{code: 'f = function(a) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a) {}', options: ['never']},
|
|
{code: 'f = function(a) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a,) {}', options: ['always']},
|
|
{code: 'f = function(a,\n) {}', options: ['always']},
|
|
{code: 'f = function(a,\n) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a,\n) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a\n) {}', options: ['never']},
|
|
{code: 'f = function(a\n) {}', options: ['only-multiline']},
|
|
|
|
{code: 'f = function(a=1) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a=1) {}', options: ['never']},
|
|
{code: 'f = function(a=1) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a=1,) {}', options: ['always']},
|
|
{code: 'f = function(a=1,\n) {}', options: ['always']},
|
|
{code: 'f = function(a=1,\n) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a=1,\n) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a=1\n) {}', options: ['never']},
|
|
{code: 'f = function(a=1\n) {}', options: ['only-multiline']},
|
|
|
|
{code: 'f = function(a:T) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a:T) {}', options: ['never']},
|
|
{code: 'f = function(a:T) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a:T,) {}', options: ['always']},
|
|
{code: 'f = function(a:T,\n) {}', options: ['always']},
|
|
{code: 'f = function(a:T,\n) {}', options: ['always-multiline']},
|
|
{code: 'f = function(a:T,\n) {}', options: ['only-multiline']},
|
|
{code: 'f = function(a:T\n) {}', options: ['never']},
|
|
{code: 'f = function(a:T\n) {}', options: ['only-multiline']},
|
|
|
|
// ArrowFunctionExpression
|
|
{code: 'f = (a) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a) => {}', options: ['never']},
|
|
{code: 'f = (a) => {}', options: ['only-multiline']},
|
|
{code: 'f = (a,) => {}', options: ['always']},
|
|
{code: 'f = (a,\n) => {}', options: ['always']},
|
|
{code: 'f = (a,\n) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a,\n) => {}', options: ['only-multiline']},
|
|
{code: 'f = (a\n) => {}', options: ['never']},
|
|
{code: 'f = (a\n) => {}', options: ['only-multiline']},
|
|
|
|
{code: 'f = a => {}', options: ['always-multiline']},
|
|
{code: 'f = a => {}', options: ['never']},
|
|
{code: 'f = a => {}', options: ['only-multiline']},
|
|
{code: 'f = a => {}', options: ['always']},
|
|
|
|
{code: 'f = (a=1) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a=1) => {}', options: ['never']},
|
|
{code: 'f = (a=1) => {}', options: ['only-multiline']},
|
|
{code: 'f = (a=1,) => {}', options: ['always']},
|
|
{code: 'f = (a=1,\n) => {}', options: ['always']},
|
|
{code: 'f = (a=1,\n) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a=1,\n) => {}', options: ['only-multiline']},
|
|
{code: 'f = (a=1\n) => {}', options: ['never']},
|
|
{code: 'f = (a=1\n) => {}', options: ['only-multiline']},
|
|
|
|
{code: 'f = (a:T) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a:T) => {}', options: ['never']},
|
|
{code: 'f = (a:T) => {}', options: ['only-multiline']},
|
|
// Arrow functions with flow types aren't getting the correct loc.
|
|
// {code: 'f = (a:T,) => {}', options: ['always']},
|
|
// {code: 'f = (a:T,\n) => {}', options: ['always']},
|
|
{code: 'f = (a:T,\n) => {}', options: ['always-multiline']},
|
|
{code: 'f = (a:T,\n) => {}', options: ['only-multiline']},
|
|
{code: 'f = (a:T\n) => {}', options: ['never']},
|
|
{code: 'f = (a:T\n) => {}', options: ['only-multiline']},
|
|
|
|
// CallExpression
|
|
{code: 'f(a)', options: ['always-multiline']},
|
|
{code: 'f(a)', options: ['never']},
|
|
{code: 'f(a)', options: ['only-multiline']},
|
|
{code: 'f(a,)', options: ['always']},
|
|
{code: 'f(a,\n)', options: ['always']},
|
|
{code: 'f(a,\n)', options: ['always-multiline']},
|
|
{code: 'f(a,\n)', options: ['only-multiline']},
|
|
{code: 'f(a\n)', options: ['never']},
|
|
{code: 'f(a\n)', options: ['only-multiline']},
|
|
{code: 'f(...a)', options: ['always-multiline']},
|
|
{code: 'f(...a)', options: ['never']},
|
|
{code: 'f(...a)', options: ['only-multiline']},
|
|
{code: 'f(...a,)', options: ['always']},
|
|
{code: 'f(...a,\n)', options: ['always']},
|
|
{code: 'f(...a,\n)', options: ['always-multiline']},
|
|
{code: 'f(...a,\n)', options: ['only-multiline']},
|
|
{code: 'f(...a\n)', options: ['never']},
|
|
{code: 'f(...a\n)', options: ['only-multiline']},
|
|
|
|
// NewExpression
|
|
{code: 'new F(a)', options: ['always-multiline']},
|
|
{code: 'new F(a)', options: ['never']},
|
|
{code: 'new F(a)', options: ['only-multiline']},
|
|
{code: 'new F(a,)', options: ['always']},
|
|
{code: 'new F(a,\n)', options: ['always']},
|
|
{code: 'new F(a,\n)', options: ['always-multiline']},
|
|
{code: 'new F(a,\n)', options: ['only-multiline']},
|
|
{code: 'new F(a\n)', options: ['never']},
|
|
{code: 'new F(a\n)', options: ['only-multiline']},
|
|
{code: 'new F(...a)', options: ['always-multiline']},
|
|
{code: 'new F(...a)', options: ['never']},
|
|
{code: 'new F(...a)', options: ['only-multiline']},
|
|
{code: 'new F(...a,)', options: ['always']},
|
|
{code: 'new F(...a,\n)', options: ['always']},
|
|
{code: 'new F(...a,\n)', options: ['always-multiline']},
|
|
{code: 'new F(...a,\n)', options: ['only-multiline']},
|
|
{code: 'new F(...a\n)', options: ['never']},
|
|
{code: 'new F(...a\n)', options: ['only-multiline']},
|
|
],
|
|
invalid: [
|
|
// FunctionDeclaration
|
|
{code: 'function f(a) {}', output: 'function f(a,) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'function f(a,) {}', output: 'function f(a) {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a,) {}', output: 'function f(a) {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a,) {}', output: 'function f(a) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a,\n) {}', output: 'function f(a\n) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a\n) {}', output: 'function f(a,\n) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'function f(a\n) {}', output: 'function f(a,\n) {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
{code: 'function f(a=1) {}', output: 'function f(a=1,) {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'function f(a=1,) {}', output: 'function f(a=1) {}', options: ['always-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'function f(a=1,) {}', output: 'function f(a=1) {}', options: ['always-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'function f(a=1,) {}', output: 'function f(a=1) {}', options: ['only-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'function f(a=1,) {}', output: 'function f(a=1) {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'function f(a=1,\n) {}', output: 'function f(a=1\n) {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'function f(a=1\n) {}', output: 'function f(a=1,\n) {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'function f(a=1\n) {}', output: 'function f(a=1,\n) {}', options: ['always-multiline'], errors: MISSING_AP},
|
|
|
|
{code: 'function f(a:T) {}', output: 'function f(a:T,) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'function f(a:T,) {}', output: 'function f(a:T) {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a:T,) {}', output: 'function f(a:T) {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a:T,) {}', output: 'function f(a:T) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a:T,\n) {}', output: 'function f(a:T\n) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'function f(a:T\n) {}', output: 'function f(a:T,\n) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'function f(a:T\n) {}', output: 'function f(a:T,\n) {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
// FunctionExpression
|
|
{code: 'f = function f(a) {}', output: 'f = function f(a,) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = function f(a,) {}', output: 'f = function f(a) {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a,) {}', output: 'f = function f(a) {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a,) {}', output: 'f = function f(a) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a,\n) {}', output: 'f = function f(a\n) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a\n) {}', output: 'f = function f(a,\n) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = function f(a\n) {}', output: 'f = function f(a,\n) {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
{code: 'f = function f(a=1) {}', output: 'f = function f(a=1,) {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'f = function f(a=1,) {}', output: 'f = function f(a=1) {}', options: ['always-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'f = function f(a=1,) {}', output: 'f = function f(a=1) {}', options: ['only-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'f = function f(a=1,) {}', output: 'f = function f(a=1) {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'f = function f(a=1,\n) {}', output: 'f = function f(a=1\n) {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'f = function f(a=1\n) {}', output: 'f = function f(a=1,\n) {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'f = function f(a=1\n) {}', output: 'f = function f(a=1,\n) {}', options: ['always-multiline'], errors: MISSING_AP},
|
|
|
|
{code: 'f = function f(a:T) {}', output: 'f = function f(a:T,) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = function f(a:T,) {}', output: 'f = function f(a:T) {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a:T,) {}', output: 'f = function f(a:T) {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a:T,) {}', output: 'f = function f(a:T) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a:T,\n) {}', output: 'f = function f(a:T\n) {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = function f(a:T\n) {}', output: 'f = function f(a:T,\n) {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = function f(a:T\n) {}', output: 'f = function f(a:T,\n) {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
// ArrowFunctionExpression
|
|
{code: 'f = (a) => {}', output: 'f = (a,) => {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = (a,) => {}', output: 'f = (a) => {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = (a,) => {}', output: 'f = (a) => {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f = (a,) => {}', output: 'f = (a) => {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = (a,\n) => {}', output: 'f = (a\n) => {}', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f = (a\n) => {}', output: 'f = (a,\n) => {}', options: ['always'], errors: MISSING_I},
|
|
{code: 'f = (a\n) => {}', output: 'f = (a,\n) => {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
{code: 'f = (a=1) => {}', output: 'f = (a=1,) => {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'f = (a=1,) => {}', output: 'f = (a=1) => {}', options: ['always-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'f = (a=1,) => {}', output: 'f = (a=1) => {}', options: ['only-multiline'], errors: UNEXPECTED_AP},
|
|
{code: 'f = (a=1,) => {}', output: 'f = (a=1) => {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'f = (a=1,\n) => {}', output: 'f = (a=1\n) => {}', options: ['never'], errors: UNEXPECTED_AP},
|
|
{code: 'f = (a=1\n) => {}', output: 'f = (a=1,\n) => {}', options: ['always'], errors: MISSING_AP},
|
|
{code: 'f = (a=1\n) => {}', output: 'f = (a=1,\n) => {}', options: ['always-multiline'], errors: MISSING_AP},
|
|
|
|
// Arrow functions with flow types aren't getting the correct loc.
|
|
// {code: 'f = (a:T) => {}', output: 'f = (a:T,) => {}', options: ['always'], errors: MISSING_I},
|
|
// {code: 'f = (a:T,) => {}', output: 'f = (a:T) => {}', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
// {code: 'f = (a:T,) => {}', output: 'f = (a:T) => {}', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
// {code: 'f = (a:T,) => {}', output: 'f = (a:T) => {}', options: ['never'], errors: UNEXPECTED_I},
|
|
// {code: 'f = (a:T,\n) => {}', output: 'f = (a:T\n) => {}', options: ['never'], errors: UNEXPECTED_I},
|
|
// {code: 'f = (a:T\n) => {}', output: 'f = (a:T,\n) => {}', options: ['always'], errors: MISSING_I},
|
|
// {code: 'f = (a:T\n) => {}', output: 'f = (a:T,\n) => {}', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
// CallExpression
|
|
{code: 'f(a)', output: 'f(a,)', options: ['always'], errors: MISSING_I},
|
|
{code: 'f(a,)', output: 'f(a)', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f(a,)', output: 'f(a)', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'f(a,)', output: 'f(a)', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f(a,\n)', output: 'f(a\n)', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'f(a\n)', output: 'f(a,\n)', options: ['always'], errors: MISSING_I},
|
|
{code: 'f(a\n)', output: 'f(a,\n)', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
{code: 'f(...a)', output: 'f(...a,)', options: ['always'], errors: MISSING_SE},
|
|
{code: 'f(...a,)', output: 'f(...a)', options: ['always-multiline'], errors: UNEXPECTED_SE},
|
|
{code: 'f(...a,)', output: 'f(...a)', options: ['only-multiline'], errors: UNEXPECTED_SE},
|
|
{code: 'f(...a,)', output: 'f(...a)', options: ['never'], errors: UNEXPECTED_SE},
|
|
{code: 'f(...a,\n)', output: 'f(...a\n)', options: ['never'], errors: UNEXPECTED_SE},
|
|
{code: 'f(...a\n)', output: 'f(...a,\n)', options: ['always'], errors: MISSING_SE},
|
|
{code: 'f(...a\n)', output: 'f(...a,\n)', options: ['always-multiline'], errors: MISSING_SE},
|
|
|
|
// NewExpression
|
|
{code: 'new F(a)', output: 'new F(a,)', options: ['always'], errors: MISSING_I},
|
|
{code: 'new F(a,)', output: 'new F(a)', options: ['always-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'new F(a,)', output: 'new F(a)', options: ['only-multiline'], errors: UNEXPECTED_I},
|
|
{code: 'new F(a,)', output: 'new F(a)', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'new F(a,\n)', output: 'new F(a\n)', options: ['never'], errors: UNEXPECTED_I},
|
|
{code: 'new F(a\n)', output: 'new F(a,\n)', options: ['always'], errors: MISSING_I},
|
|
{code: 'new F(a\n)', output: 'new F(a,\n)', options: ['always-multiline'], errors: MISSING_I},
|
|
|
|
{code: 'new F(...a)', output: 'new F(...a,)', options: ['always'], errors: MISSING_SE},
|
|
{code: 'new F(...a,)', output: 'new F(...a)', options: ['always-multiline'], errors: UNEXPECTED_SE},
|
|
{code: 'new F(...a,)', output: 'new F(...a)', options: ['only-multiline'], errors: UNEXPECTED_SE},
|
|
{code: 'new F(...a,)', output: 'new F(...a)', options: ['never'], errors: UNEXPECTED_SE},
|
|
{code: 'new F(...a,\n)', output: 'new F(...a\n)', options: ['never'], errors: UNEXPECTED_SE},
|
|
{code: 'new F(...a\n)', output: 'new F(...a,\n)', options: ['always'], errors: MISSING_SE},
|
|
{code: 'new F(...a\n)', output: 'new F(...a,\n)', options: ['always-multiline'], errors: MISSING_SE},
|
|
],
|
|
});
|