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 { PluginContext, Plugins } from '../common/plugin-context'; 18import { ParsedUISyntaxLinterTransformer } from './transformers/parsed-ui-syntax-linter-transformer'; 19import { createUISyntaxRuleProcessor } from './processor'; 20import rules from './rules'; 21 22export function uiSyntaxLinterTransform(): Plugins { 23 const processor = createUISyntaxRuleProcessor(rules); 24 return { 25 name: 'ui-syntax-plugin', 26 parsed(this: PluginContext): arkts.EtsScript | undefined { 27 const contextPtr = arkts.arktsGlobal.compilerContext?.peer ?? this.getContextPtr(); 28 if (!contextPtr) { 29 return undefined; 30 } 31 let program = arkts.getOrUpdateGlobalContext(contextPtr).program; 32 const node = program.astNode; 33 if (node) { 34 const script = new ParsedUISyntaxLinterTransformer(processor).visitor( 35 node, 36 ) as arkts.EtsScript; 37 arkts.setAllParents(script); 38 this.setArkTSAst(script); 39 return script; 40 } 41 return undefined; 42 } 43 }; 44} 45