c7dced8d4a2882c2a702ad0cbaba9f3cfcd8e914
[platform/framework/web/crosswalk-tizen.git] /
1 /**
2  * @fileoverview Prevent multiple component definition per file
3  * @author Yannick Croissant
4  */
5 'use strict';
6
7 var componentUtil = require('../util/component');
8 var ComponentList = componentUtil.List;
9
10 // ------------------------------------------------------------------------------
11 // Rule Definition
12 // ------------------------------------------------------------------------------
13
14 module.exports = function(context) {
15
16   var componentList = new ComponentList();
17
18   var MULTI_COMP_MESSAGE = 'Declare only one React component per file';
19
20   // --------------------------------------------------------------------------
21   // Public
22   // --------------------------------------------------------------------------
23
24   return {
25     'Program:exit': function() {
26       if (componentList.count() <= 1) {
27         return;
28       }
29
30       var list = componentList.getList();
31       var i = 0;
32
33       for (var component in list) {
34         if (!list.hasOwnProperty(component) || ++i === 1) {
35           continue;
36         }
37         context.report(list[component].node, MULTI_COMP_MESSAGE);
38       }
39     },
40
41     ReturnStatement: function(node) {
42       if (!componentUtil.isReactComponent(context, node)) {
43         return;
44       }
45       componentList.set(context, node);
46     }
47   };
48 };