mm_eslint 1.3.8 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/detector.js +76 -3
- package/package.json +1 -1
package/detector.js
CHANGED
|
@@ -542,9 +542,7 @@ Detector.prototype._checkWordLength = function (name, max_word_len, name_type) {
|
|
|
542
542
|
}
|
|
543
543
|
|
|
544
544
|
var name_type_desc = this.config.name_type_map[name_type] || '名称';
|
|
545
|
-
|
|
546
|
-
var words = [];
|
|
547
|
-
|
|
545
|
+
|
|
548
546
|
// 处理私有标识符(开头的下划线)
|
|
549
547
|
var processed_name = name;
|
|
550
548
|
var has_private_prefix = false;
|
|
@@ -554,6 +552,9 @@ Detector.prototype._checkWordLength = function (name, max_word_len, name_type) {
|
|
|
554
552
|
processed_name = name.substring(1); // 去掉开头的下划线
|
|
555
553
|
}
|
|
556
554
|
|
|
555
|
+
// 分割单词(根据命名风格)
|
|
556
|
+
var words = [];
|
|
557
|
+
|
|
557
558
|
if (processed_name.includes('_')) {
|
|
558
559
|
words = processed_name.split('_');
|
|
559
560
|
} else if (processed_name.includes('-')) {
|
|
@@ -568,6 +569,16 @@ Detector.prototype._checkWordLength = function (name, max_word_len, name_type) {
|
|
|
568
569
|
words.unshift('_');
|
|
569
570
|
}
|
|
570
571
|
|
|
572
|
+
// 过滤空字符串
|
|
573
|
+
words = words.filter(function(word) {
|
|
574
|
+
return word && word.length > 0;
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
// 如果是单个单词,则不检测单词长度
|
|
578
|
+
if (words.length <= 1) {
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
581
|
+
|
|
571
582
|
for (var i = 0; i < words.length; i++) {
|
|
572
583
|
var word = words[i];
|
|
573
584
|
// 跳过空字符串和私有标识符(单个下划线)
|
|
@@ -692,6 +703,60 @@ Detector.prototype._splitNameIntoWords = function (name) {
|
|
|
692
703
|
return words;
|
|
693
704
|
};
|
|
694
705
|
|
|
706
|
+
/**
|
|
707
|
+
* 检查是否为第三方库的配置参数
|
|
708
|
+
* @param {object} node AST节点
|
|
709
|
+
* @param {object} parent_node 父节点
|
|
710
|
+
* @returns {boolean} 是否为第三方库配置参数
|
|
711
|
+
*/
|
|
712
|
+
Detector.prototype._isThirdPartyConfigProperty = function (node, parent_node) {
|
|
713
|
+
try {
|
|
714
|
+
// 检查当前节点是否为对象字面量的属性
|
|
715
|
+
if (!parent_node || parent_node.type !== 'ObjectExpression') {
|
|
716
|
+
return false;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// 检查对象字面量是否作为方法调用的参数
|
|
720
|
+
var grandparent = parent_node.parent;
|
|
721
|
+
if (!grandparent || grandparent.type !== 'CallExpression') {
|
|
722
|
+
return false;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// 检查方法调用是否来自外部模块(非当前文件定义的函数)
|
|
726
|
+
var callee = grandparent.callee;
|
|
727
|
+
if (!callee) {
|
|
728
|
+
return false;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// 如果是成员表达式(如 chokidar.watch),则认为是第三方库调用
|
|
732
|
+
if (callee.type === 'MemberExpression') {
|
|
733
|
+
return true;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// 如果是标识符,检查是否是常见的第三方库函数名
|
|
737
|
+
if (callee.type === 'Identifier') {
|
|
738
|
+
var common_third_party_functions = [
|
|
739
|
+
'watch', 'require', 'import', 'create', 'build', 'compile',
|
|
740
|
+
'parse', 'stringify', 'readFile', 'writeFile', 'mkdir',
|
|
741
|
+
'exec', 'spawn', 'fork', 'connect', 'listen', 'send'
|
|
742
|
+
];
|
|
743
|
+
|
|
744
|
+
// 如果是常见的第三方库函数名,则认为是第三方库调用
|
|
745
|
+
if (common_third_party_functions.includes(callee.name)) {
|
|
746
|
+
return true;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
// 对于其他标识符,暂时不认为是第三方库调用(避免误判)
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
return false;
|
|
754
|
+
} catch (error) {
|
|
755
|
+
console.error('检查第三方库配置参数时出错:', error);
|
|
756
|
+
return false;
|
|
757
|
+
}
|
|
758
|
+
};
|
|
759
|
+
|
|
695
760
|
/**
|
|
696
761
|
* 获取属性类型
|
|
697
762
|
* @param {object} val_node 属性值节点
|
|
@@ -779,6 +844,14 @@ Detector.prototype._checkPropertyName = function (
|
|
|
779
844
|
return null;
|
|
780
845
|
}
|
|
781
846
|
|
|
847
|
+
// 检查是否为第三方库的配置参数(方法调用中的对象字面量属性)
|
|
848
|
+
var is_third_party_config = this._isThirdPartyConfigProperty(node, parent_node);
|
|
849
|
+
|
|
850
|
+
// 如果是第三方库的配置参数,则不进行属性名检测
|
|
851
|
+
if (is_third_party_config) {
|
|
852
|
+
return null;
|
|
853
|
+
}
|
|
854
|
+
|
|
782
855
|
// 获取属性类型
|
|
783
856
|
var prop_type = this._getPropType(val_node, prop_name, parent_node);
|
|
784
857
|
var rule_type = '';
|