1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import * as arkts from '@koalaui/libarkts'; 17import { UISyntaxRule } from './ui-syntax-rule'; 18 19const rule: UISyntaxRule = { 20 name: 'no-same-as-built-in-attribute', 21 messages: { 22 duplicateName: `The struct name '{{structName}}' should not have the same name as a built-in attribute.`, 23 }, 24 setup(context) { 25 const builtInAttributes = ['fontColor', 'width', 'height', 'size', 'border', 'backgroundColor', 'margin', 26 'padding']; 27 return { 28 parsed: (node): void => { 29 if (!arkts.isStructDeclaration(node)) { 30 return; 31 } 32 const structName = node.definition.ident?.name ?? ' '; 33 const structIdent = node.definition.ident; 34 // If the struct name matches any built-in attribute, report an error 35 if (builtInAttributes.includes(structName) && structIdent) { 36 context.report({ 37 node: structIdent, 38 message: rule.messages.duplicateName, 39 data: { structName } 40 }); 41 } 42 }, 43 }; 44 }, 45}; 46 47export default rule; 48