在panel中添加了Checker相关的选项

This commit is contained in:
Pan Qiancheng 2024-11-02 15:22:28 +08:00
parent 16bd58ca22
commit dc7254fae2
2 changed files with 54 additions and 10 deletions

View File

@ -12,7 +12,11 @@ import {
getTriggerCountByEntity, getTriggerCountByEntity,
subscribeTrigger, subscribeTrigger,
} from '../utils/triggers'; } from '../utils/triggers';
import { TriggerInfo } from '../types'; import { CheckerInfo, TriggerInfo } from '../types';
import {
getCheckerCountByEntity,
getCheckersInfoByEntity,
} from '../utils/checkers';
class OakTreeDataProvider implements vscode.TreeDataProvider<TreeItem> { class OakTreeDataProvider implements vscode.TreeDataProvider<TreeItem> {
private disposeGlobal: (() => void) | null = null; private disposeGlobal: (() => void) | null = null;
@ -106,17 +110,10 @@ class OakTreeDataProvider implements vscode.TreeDataProvider<TreeItem> {
const children: TreeItem[] = []; const children: TreeItem[] = [];
children.push(new ComponentsItem(element.getEntityName())); children.push(new ComponentsItem(element.getEntityName()));
children.push(new TriggersItem(element.getEntityName())); children.push(new TriggersItem(element.getEntityName()));
children.push(new CheckersItem(element.getEntityName()));
return children; return children;
} }
if (element instanceof TriggersItem) { if (element instanceof TriggersItem) {
// return entityConfig
// .getEntityDesc(element.getEntityName())
// .projectionList.map((projection) => {
// return new TreeItem(
// projection,
// vscode.TreeItemCollapsibleState.None
// );
// });
return getTrigersInfoByEntity(element.getEntityName()).map( return getTrigersInfoByEntity(element.getEntityName()).map(
(trigger) => { (trigger) => {
return new TriggerItem( return new TriggerItem(
@ -126,6 +123,16 @@ class OakTreeDataProvider implements vscode.TreeDataProvider<TreeItem> {
} }
); );
} }
if (element instanceof CheckersItem) {
return getCheckersInfoByEntity(element.getEntityName()).map(
(checker) => {
return new CheckerItem(
checker,
vscode.TreeItemCollapsibleState.None
);
}
);
}
if (element instanceof ComponentsItem) { if (element instanceof ComponentsItem) {
return componentConfig return componentConfig
.getEntityComponents(element.getEntityName()) .getEntityComponents(element.getEntityName())
@ -213,6 +220,8 @@ export class ComponentItem extends TreeItem {
} }
} }
// Trigger相关的选项
export class TriggersItem extends TreeItem { export class TriggersItem extends TreeItem {
constructor(public readonly entity: string) { constructor(public readonly entity: string) {
const count = getTriggerCountByEntity(entity); const count = getTriggerCountByEntity(entity);
@ -246,6 +255,41 @@ export class TriggerItem extends TreeItem {
} }
} }
// Checker相关的选项
export class CheckersItem extends TreeItem {
constructor(public readonly entity: string) {
const count = getCheckerCountByEntity(entity);
super(
`Checkers (${count})`,
vscode.TreeItemCollapsibleState.Collapsed,
entity
);
this.contextValue = 'checkersItem'; // 添加这行,用于识别右键菜单项
}
}
export class CheckerItem extends TreeItem {
constructor(
public readonly checker: CheckerInfo,
public readonly collapsibleState: vscode.TreeItemCollapsibleState
) {
super(`${checker.action.join(',')}`, collapsibleState);
this.contextValue = 'checkerItem'; // 添加这行,用于识别右键菜单项
// 命令点击后跳转到指定文件的指定位置
const args = {
filePath: checker.path,
start: checker.pos.start,
end: checker.pos.end,
};
this.command = {
command: 'oak-assistant.jumpToPosition',
title: '定位到文件',
arguments: [args],
};
}
}
export const createOakTreePanel = () => { export const createOakTreePanel = () => {
const treeDataProvider = new OakTreeDataProvider(); const treeDataProvider = new OakTreeDataProvider();
const treeView = vscode.window.createTreeView('oak-entities', { const treeView = vscode.window.createTreeView('oak-entities', {

View File

@ -1061,7 +1061,7 @@ export const getCheckerCountByEntity = (entity: string): number => {
* @param entity entity名称 * @param entity entity名称
* @returns checker信息 * @returns checker信息
*/ */
export const getTrigersInfoByEntity = (entity: string): CheckerInfo[] => { export const getCheckersInfoByEntity = (entity: string): CheckerInfo[] => {
return checkers return checkers
.filter((t) => t.entity === entity) .filter((t) => t.entity === entity)
.map((t) => { .map((t) => {