saven
Version:
73 lines (65 loc) • 1.47 kB
JavaScript
function docsUrl (rule) {
return 'https://github.com/NervJS/taro/tree/master/packages/eslint-plugin-taro/docs/' + rule + '.md'
}
function buildDocsMeta (description, rule) {
return {
description: '[Taro] ' + description,
category: 'Taro',
recommended: true,
url: docsUrl(rule)
}
}
const parserOptions = {
ecmaVersion: 9,
sourceType: 'module',
ecmaFeatures: {
jsx: true
}
}
function isTaroComponent (context, node) {
const parents = context.getAncestors(node)
const classDcl = parents.find(p => p.type === 'ClassDeclaration')
if (
classDcl && classDcl.superClass
) {
const superClass = classDcl.superClass
if (superClass.type === 'Identifier' && superClass.name === 'Component') {
return true
}
if (superClass.type === 'MemberExpression' && superClass.object.name === 'Taro' && superClass.property.name === 'Component') {
return true
}
}
return false
}
function testComponent (code) {
return `
class App extends Component {
render () {
${code}
}
}
`
}
function testValid (tests) {
return tests.map(code => ({
code: testComponent(code),
parser: 'babel-eslint'
}))
}
function testInvalid (message, tests) {
return tests.map(code => ({
code: testComponent(code),
errors: [{ message }],
parser: 'babel-eslint'
}))
}
module.exports = {
docsUrl,
buildDocsMeta,
parserOptions,
testComponent,
testValid,
testInvalid,
isTaroComponent
}