2016-06-12 5 views
2

Проблема:Выделяют методы и свойства

Я в настоящее время улучшение valid-expect rule для eslint-plugin-jasmine пакета пытается справиться еще один недопустимый жасмин expect() использование при согласовани не называется:

expect(true).toBeDefined; 

Действительное использование:

expect(true).toBeDefined(); 

Я становлюсь довольно близко - я могу определить ине, что есть выражение члена на expect():

// matcher was not called 
MemberExpression: function (node) { 
    if (node.object && node.object.callee.name === 'expect') { 
    console.log(node.property) 
    } 
} 

Но node.property в обоих действительных и недействительных случаях из Identifier типа:

Node { 
    type: 'Identifier', 
    start: 13, 
    end: 24, 
    loc: 
    SourceLocation { 
    start: Position { line: 1, column: 13 }, 
    end: Position { line: 1, column: 24 } }, 
    range: [ 13, 24 ], 
    name: 'toBeDefined' } 

И нет ничего очевидно, указывая, что это свойства или метода.

Вопрос:

Как я могу определить, является ли свойство отозваны или не в ESLint?

ответ

1

expect(true).toBeDefined разбирается в MemberExpression узел, но это expect(true).toBeDefined() анализатор в CallExpression. Я на самом деле не уверен на 100%, почему это происходит, но во втором случае кажется, что весь оператор до открытия скобок является одним единственным CallExpression, я бы ожидал, что будет два отдельных CallExpression, но это не означает, t, похоже, имеет место.

Итак, что вы можете сделать, это послушать CallExpression и проверить, что набрано Identifier с именем expect. И затем проверьте, является ли это бабушка или дедушка MemberExpression или другой CallExpression.

+0

Интересно, спасибо за это! Мне действительно нужно было перейти к родительскому принципу родителя и проверить тип. 'Node.parent.parent.type' будет' CallExpression', если это вызов метода и 'ExpressionStatement', если свойство ... это то, что Вы имели в виду? Обратите внимание, что 'node.parent.type' все равно будет' MemberExpression' в обоих случаях. (Https://gist.github.com/alecxe/f34fe3140ab13ac7ab5626fb8fcd637c#file-valid-expect-js-L20) – alecxe

+0

Да, у вас есть чтобы перейти на узел бабушки и дедушки. Извини за это. –

+0

Хорошо, что работает, покрывается испытаниями и отправляет PR. Благодарю. – alecxe

Смежные вопросы