1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /**
- * @fileoverview Restrict file extensions that may contain JSX
- * @author Joe Lencioni
- */
- 'use strict';
- const path = require('path');
- const docsUrl = require('../util/docsUrl');
- // ------------------------------------------------------------------------------
- // Constants
- // ------------------------------------------------------------------------------
- const DEFAULTS = {
- extensions: ['.jsx']
- };
- // ------------------------------------------------------------------------------
- // Rule Definition
- // ------------------------------------------------------------------------------
- module.exports = {
- meta: {
- docs: {
- description: 'Restrict file extensions that may contain JSX',
- category: 'Stylistic Issues',
- recommended: false,
- url: docsUrl('jsx-filename-extension')
- },
- schema: [{
- type: 'object',
- properties: {
- extensions: {
- type: 'array',
- items: {
- type: 'string'
- }
- }
- },
- additionalProperties: false
- }]
- },
- create: function(context) {
- function getExtensionsConfig() {
- return context.options[0] && context.options[0].extensions || DEFAULTS.extensions;
- }
- let invalidExtension;
- let invalidNode;
- // --------------------------------------------------------------------------
- // Public
- // --------------------------------------------------------------------------
- return {
- JSXElement: function(node) {
- const filename = context.getFilename();
- if (filename === '<text>') {
- return;
- }
- if (invalidNode) {
- return;
- }
- const allowedExtensions = getExtensionsConfig();
- const isAllowedExtension = allowedExtensions.some(extension => filename.slice(-extension.length) === extension);
- if (isAllowedExtension) {
- return;
- }
- invalidNode = node;
- invalidExtension = path.extname(filename);
- },
- 'Program:exit': function() {
- if (!invalidNode) {
- return;
- }
- context.report({
- node: invalidNode,
- message: `JSX not allowed in files with extension '${invalidExtension}'`
- });
- }
- };
- }
- };
|