@lcap/nasl
Version:
NetEase Application Specific Language
52 lines • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ruleChangeValueFieldInViewElement = void 0;
const asserts_1 = require("@lcap/nasl-concepts/asserts");
// 类型不匹配:期望类型为 List<字符串>,实际类型为 List<app.enums.ColorEnum>
const msgReg = /类型不匹配:期望类型为 (.*),实际类型为 (.*)/;
exports.ruleChangeValueFieldInViewElement = {
isFixable(diagnostic) {
const match = diagnostic.message?.match(msgReg);
const node = diagnostic.node;
const attr = (0, asserts_1.isBindAttribute)(node) ? node : node?.parentNode;
const element = attr?.parentNode;
// 组件值属性传入了枚举类型, 导致报错
if ((0, asserts_1.isBindAttribute)(attr)
&& (0, asserts_1.isViewElement)(element)) {
// 数据源是EnumToList
const dataSourceAttr = element.bindAttrs.find(attr => attr.name === 'dataSource');
const expression = dataSourceAttr?.expression;
// 值字段是value/text
const valueFieldAttr = element.bindAttrs.find(attr => attr.name === 'valueField');
if (dataSourceAttr?.type === 'dynamic'
&& (0, asserts_1.isCallFunction)(expression)
&& expression.calleeKey === 'nasl.util.EnumToList') {
// case1: valueField是value,传入枚举类型,修为item
if (['text', 'value'].includes(valueFieldAttr?.value)
&& match?.[2]?.includes('app.enums.')) {
return { hint: '一键修复' };
}
// case2: valueField是item,传入非枚举类型,修为value
if (valueFieldAttr?.value === 'item'
&& !match?.[2]?.includes('app.enums.')) {
return { hint: '一键修复' };
}
}
}
return false;
},
commitFix(node) {
const attr = (0, asserts_1.isBindAttribute)(node) ? node : node?.parentNode;
const element = attr?.parentNode;
if ((0, asserts_1.isBindAttribute)(attr)
&& (0, asserts_1.isViewElement)(element)) {
const valueFieldAttr = element.bindAttrs.find(attr => attr.name === 'valueField');
if (valueFieldAttr) {
valueFieldAttr.update({
value: valueFieldAttr.value === 'item' ? 'value' : 'item',
});
}
}
}
};
//# sourceMappingURL=rule-change-valuefield-in-viewelement.js.map