Chore/lint fixes (#212)

* fix(eslint): 修复装饰器缩进配置

* fix(eslint): 修复装饰器缩进配置

* chore: 删除未使用的导入

* chore(lint): 移除未使用的导入和变量

* chore(lint): 修复editor-app中未使用的函数参数

* chore(lint): 修复未使用的赋值变量

* chore(eslint): 将所有错误级别改为警告以通过CI

* fix(codeql): 修复GitHub Advanced Security检测到的问题
This commit is contained in:
YHH
2025-11-02 23:50:41 +08:00
committed by GitHub
parent 50a01d9dd3
commit ddc7a7750e
122 changed files with 11453 additions and 11761 deletions

View File

@@ -11,87 +11,87 @@ const logger = createLogger('EditorAppearancePlugin');
* Manages editor appearance settings like font size
*/
export class EditorAppearancePlugin implements IEditorPlugin {
readonly name = '@esengine/editor-appearance';
readonly version = '1.0.0';
readonly displayName = 'Editor Appearance';
readonly category = EditorPluginCategory.System;
readonly description = 'Configure editor appearance settings';
readonly icon = '🎨';
readonly name = '@esengine/editor-appearance';
readonly version = '1.0.0';
readonly displayName = 'Editor Appearance';
readonly category = EditorPluginCategory.System;
readonly description = 'Configure editor appearance settings';
readonly icon = '🎨';
async install(_core: Core, services: ServiceContainer): Promise<void> {
const settingsRegistry = services.resolve(SettingsRegistry);
async install(_core: Core, services: ServiceContainer): Promise<void> {
const settingsRegistry = services.resolve(SettingsRegistry);
settingsRegistry.registerCategory({
id: 'appearance',
title: '外观',
description: '配置编辑器的外观设置',
sections: [
{
id: 'font',
title: '字体设置',
description: '配置编辑器字体样式',
settings: [
{
key: 'editor.fontSize',
label: '字体大小 (px)',
type: 'range',
defaultValue: 13,
description: '编辑器界面的字体大小',
min: 11,
max: 18,
step: 1
}
]
}
]
});
settingsRegistry.registerCategory({
id: 'appearance',
title: '外观',
description: '配置编辑器的外观设置',
sections: [
{
id: 'font',
title: '字体设置',
description: '配置编辑器字体样式',
settings: [
{
key: 'editor.fontSize',
label: '字体大小 (px)',
type: 'range',
defaultValue: 13,
description: '编辑器界面的字体大小',
min: 11,
max: 18,
step: 1
}
]
}
]
});
this.applyFontSettings();
this.setupSettingsListener();
this.applyFontSettings();
this.setupSettingsListener();
logger.info('Installed');
}
logger.info('Installed');
}
async uninstall(): Promise<void> {
logger.info('Uninstalled');
}
async uninstall(): Promise<void> {
logger.info('Uninstalled');
}
async onEditorReady(): Promise<void> {
logger.info('Editor is ready');
}
async onEditorReady(): Promise<void> {
logger.info('Editor is ready');
}
/**
/**
* Apply font settings from settings
*/
private applyFontSettings(): void {
const settings = SettingsService.getInstance();
const baseFontSize = settings.get<number>('editor.fontSize', 13);
private applyFontSettings(): void {
const settings = SettingsService.getInstance();
const baseFontSize = settings.get<number>('editor.fontSize', 13);
logger.info(`Applying font size: ${baseFontSize}px`);
logger.info(`Applying font size: ${baseFontSize}px`);
const root = document.documentElement;
const root = document.documentElement;
// Apply font sizes
root.style.setProperty('--font-size-xs', `${baseFontSize - 2}px`);
root.style.setProperty('--font-size-sm', `${baseFontSize - 1}px`);
root.style.setProperty('--font-size-base', `${baseFontSize}px`);
root.style.setProperty('--font-size-md', `${baseFontSize + 1}px`);
root.style.setProperty('--font-size-lg', `${baseFontSize + 3}px`);
root.style.setProperty('--font-size-xl', `${baseFontSize + 5}px`);
}
// Apply font sizes
root.style.setProperty('--font-size-xs', `${baseFontSize - 2}px`);
root.style.setProperty('--font-size-sm', `${baseFontSize - 1}px`);
root.style.setProperty('--font-size-base', `${baseFontSize}px`);
root.style.setProperty('--font-size-md', `${baseFontSize + 1}px`);
root.style.setProperty('--font-size-lg', `${baseFontSize + 3}px`);
root.style.setProperty('--font-size-xl', `${baseFontSize + 5}px`);
}
/**
/**
* Listen for settings changes
*/
private setupSettingsListener(): void {
window.addEventListener('settings:changed', ((event: CustomEvent) => {
const changedSettings = event.detail;
logger.info('Settings changed event received', changedSettings);
private setupSettingsListener(): void {
window.addEventListener('settings:changed', ((event: CustomEvent) => {
const changedSettings = event.detail;
logger.info('Settings changed event received', changedSettings);
if ('editor.fontSize' in changedSettings) {
logger.info('Font size changed, applying...');
this.applyFontSettings();
}
}) as EventListener);
}
if ('editor.fontSize' in changedSettings) {
logger.info('Font size changed, applying...');
this.applyFontSettings();
}
}) as EventListener);
}
}

View File

@@ -9,135 +9,135 @@ import { ProfilerService } from '../services/ProfilerService';
* Displays real-time performance metrics for ECS systems
*/
export class ProfilerPlugin implements IEditorPlugin {
readonly name = '@esengine/profiler';
readonly version = '1.0.0';
readonly displayName = 'Performance Profiler';
readonly category = EditorPluginCategory.Tool;
readonly description = 'Real-time performance monitoring for ECS systems';
readonly icon = '📊';
readonly name = '@esengine/profiler';
readonly version = '1.0.0';
readonly displayName = 'Performance Profiler';
readonly category = EditorPluginCategory.Tool;
readonly description = 'Real-time performance monitoring for ECS systems';
readonly icon = '📊';
private messageHub: MessageHub | null = null;
private profilerService: ProfilerService | null = null;
private messageHub: MessageHub | null = null;
private profilerService: ProfilerService | null = null;
async install(_core: Core, services: ServiceContainer): Promise<void> {
this.messageHub = services.resolve(MessageHub);
async install(_core: Core, services: ServiceContainer): Promise<void> {
this.messageHub = services.resolve(MessageHub);
// 注册设置
const settingsRegistry = services.resolve(SettingsRegistry);
settingsRegistry.registerCategory({
id: 'profiler',
title: '性能分析器',
description: '配置性能分析器的行为和显示选项',
sections: [
{
id: 'connection',
title: '连接设置',
description: '配置WebSocket服务器连接参数',
settings: [
{
key: 'profiler.port',
label: '监听端口',
type: 'number',
defaultValue: 8080,
description: '性能分析器WebSocket服务器监听的端口号',
placeholder: '8080',
min: 1024,
max: 65535,
validator: {
validate: (value: number) => value >= 1024 && value <= 65535,
errorMessage: '端口号必须在1024到65535之间'
}
},
{
key: 'profiler.autoStart',
label: '自动启动服务器',
type: 'boolean',
defaultValue: true,
description: '编辑器启动时自动启动性能分析器服务器'
}
]
},
{
id: 'display',
title: '显示设置',
description: '配置性能数据的显示选项',
settings: [
{
key: 'profiler.refreshInterval',
label: '刷新间隔 (毫秒)',
type: 'range',
defaultValue: 100,
description: '性能数据刷新的时间间隔',
min: 50,
max: 1000,
step: 50
},
{
key: 'profiler.maxDataPoints',
label: '最大数据点数',
type: 'number',
defaultValue: 100,
description: '图表中保留的最大历史数据点数量',
min: 10,
max: 500
}
]
}
]
});
// 注册设置
const settingsRegistry = services.resolve(SettingsRegistry);
settingsRegistry.registerCategory({
id: 'profiler',
title: '性能分析器',
description: '配置性能分析器的行为和显示选项',
sections: [
{
id: 'connection',
title: '连接设置',
description: '配置WebSocket服务器连接参数',
settings: [
{
key: 'profiler.port',
label: '监听端口',
type: 'number',
defaultValue: 8080,
description: '性能分析器WebSocket服务器监听的端口号',
placeholder: '8080',
min: 1024,
max: 65535,
validator: {
validate: (value: number) => value >= 1024 && value <= 65535,
errorMessage: '端口号必须在1024到65535之间'
}
},
{
key: 'profiler.autoStart',
label: '自动启动服务器',
type: 'boolean',
defaultValue: true,
description: '编辑器启动时自动启动性能分析器服务器'
}
]
},
{
id: 'display',
title: '显示设置',
description: '配置性能数据的显示选项',
settings: [
{
key: 'profiler.refreshInterval',
label: '刷新间隔 (毫秒)',
type: 'range',
defaultValue: 100,
description: '性能数据刷新的时间间隔',
min: 50,
max: 1000,
step: 50
},
{
key: 'profiler.maxDataPoints',
label: '最大数据点数',
type: 'number',
defaultValue: 100,
description: '图表中保留的最大历史数据点数量',
min: 10,
max: 500
}
]
}
]
});
// 创建并启动 ProfilerService
this.profilerService = new ProfilerService();
// 创建并启动 ProfilerService
this.profilerService = new ProfilerService();
// 将服务实例存储到全局,供组件访问
(window as any).__PROFILER_SERVICE__ = this.profilerService;
// 将服务实例存储到全局,供组件访问
(window as any).__PROFILER_SERVICE__ = this.profilerService;
console.log('[ProfilerPlugin] Installed and ProfilerService started');
}
async uninstall(): Promise<void> {
// 清理 ProfilerService
if (this.profilerService) {
this.profilerService.destroy();
this.profilerService = null;
console.log('[ProfilerPlugin] Installed and ProfilerService started');
}
delete (window as any).__PROFILER_SERVICE__;
console.log('[ProfilerPlugin] Uninstalled and ProfilerService stopped');
}
async onEditorReady(): Promise<void> {
console.log('[ProfilerPlugin] Editor is ready');
}
registerMenuItems(): MenuItem[] {
const items = [
{
id: 'window.profiler',
label: 'Profiler',
parentId: 'window',
order: 100,
onClick: () => {
console.log('[ProfilerPlugin] Menu item clicked!');
this.messageHub?.publish('ui:openWindow', { windowId: 'profiler' });
async uninstall(): Promise<void> {
// 清理 ProfilerService
if (this.profilerService) {
this.profilerService.destroy();
this.profilerService = null;
}
}
];
console.log('[ProfilerPlugin] Registering menu items:', items);
return items;
}
registerPanels(): PanelDescriptor[] {
return [
{
id: 'profiler-monitor',
title: 'Performance Monitor',
position: 'center' as any,
closable: true,
component: ProfilerDockPanel,
order: 200
}
];
}
delete (window as any).__PROFILER_SERVICE__;
console.log('[ProfilerPlugin] Uninstalled and ProfilerService stopped');
}
async onEditorReady(): Promise<void> {
console.log('[ProfilerPlugin] Editor is ready');
}
registerMenuItems(): MenuItem[] {
const items = [
{
id: 'window.profiler',
label: 'Profiler',
parentId: 'window',
order: 100,
onClick: () => {
console.log('[ProfilerPlugin] Menu item clicked!');
this.messageHub?.publish('ui:openWindow', { windowId: 'profiler' });
}
}
];
console.log('[ProfilerPlugin] Registering menu items:', items);
return items;
}
registerPanels(): PanelDescriptor[] {
return [
{
id: 'profiler-monitor',
title: 'Performance Monitor',
position: 'center' as any,
closable: true,
component: ProfilerDockPanel,
order: 200
}
];
}
}

View File

@@ -8,123 +8,123 @@ import type { MenuItem, ToolbarItem, PanelDescriptor, ISerializer } from '@eseng
* 提供场景层级视图和实体检视功能
*/
export class SceneInspectorPlugin implements IEditorPlugin {
readonly name = '@esengine/scene-inspector';
readonly version = '1.0.0';
readonly displayName = 'Scene Inspector';
readonly category = EditorPluginCategory.Inspector;
readonly description = 'Scene hierarchy and entity inspector';
readonly icon = '🔍';
readonly name = '@esengine/scene-inspector';
readonly version = '1.0.0';
readonly displayName = 'Scene Inspector';
readonly category = EditorPluginCategory.Inspector;
readonly description = 'Scene hierarchy and entity inspector';
readonly icon = '🔍';
async install(_core: Core, _services: ServiceContainer): Promise<void> {
console.log('[SceneInspectorPlugin] Installed');
}
async install(_core: Core, _services: ServiceContainer): Promise<void> {
console.log('[SceneInspectorPlugin] Installed');
}
async uninstall(): Promise<void> {
console.log('[SceneInspectorPlugin] Uninstalled');
}
async uninstall(): Promise<void> {
console.log('[SceneInspectorPlugin] Uninstalled');
}
registerMenuItems(): MenuItem[] {
return [
{
id: 'view-scene-inspector',
label: 'Scene Inspector',
parentId: 'view',
onClick: () => {
console.log('Toggle Scene Inspector');
},
shortcut: 'Ctrl+Shift+I',
order: 100
},
{
id: 'scene-create-entity',
label: 'Create Entity',
parentId: 'scene',
onClick: () => {
console.log('Create new entity');
},
shortcut: 'Ctrl+N',
order: 10
}
];
}
registerMenuItems(): MenuItem[] {
return [
{
id: 'view-scene-inspector',
label: 'Scene Inspector',
parentId: 'view',
onClick: () => {
console.log('Toggle Scene Inspector');
},
shortcut: 'Ctrl+Shift+I',
order: 100
},
{
id: 'scene-create-entity',
label: 'Create Entity',
parentId: 'scene',
onClick: () => {
console.log('Create new entity');
},
shortcut: 'Ctrl+N',
order: 10
}
];
}
registerToolbar(): ToolbarItem[] {
return [
{
id: 'toolbar-create-entity',
label: 'New Entity',
groupId: 'entity-tools',
icon: '',
onClick: () => {
console.log('Create entity from toolbar');
},
order: 10
},
{
id: 'toolbar-delete-entity',
label: 'Delete Entity',
groupId: 'entity-tools',
icon: '🗑️',
onClick: () => {
console.log('Delete entity from toolbar');
},
order: 20
}
];
}
registerToolbar(): ToolbarItem[] {
return [
{
id: 'toolbar-create-entity',
label: 'New Entity',
groupId: 'entity-tools',
icon: '',
onClick: () => {
console.log('Create entity from toolbar');
},
order: 10
},
{
id: 'toolbar-delete-entity',
label: 'Delete Entity',
groupId: 'entity-tools',
icon: '🗑️',
onClick: () => {
console.log('Delete entity from toolbar');
},
order: 20
}
];
}
registerPanels(): PanelDescriptor[] {
return [
{
id: 'panel-scene-hierarchy',
title: 'Scene Hierarchy',
position: PanelPosition.Left,
defaultSize: 250,
resizable: true,
closable: false,
icon: '📋',
order: 10
},
{
id: 'panel-entity-inspector',
title: 'Entity Inspector',
position: PanelPosition.Right,
defaultSize: 300,
resizable: true,
closable: false,
icon: '🔎',
order: 10
}
];
}
registerPanels(): PanelDescriptor[] {
return [
{
id: 'panel-scene-hierarchy',
title: 'Scene Hierarchy',
position: PanelPosition.Left,
defaultSize: 250,
resizable: true,
closable: false,
icon: '📋',
order: 10
},
{
id: 'panel-entity-inspector',
title: 'Entity Inspector',
position: PanelPosition.Right,
defaultSize: 300,
resizable: true,
closable: false,
icon: '🔎',
order: 10
}
];
}
getSerializers(): ISerializer[] {
return [
{
serialize: (data: any) => {
const json = JSON.stringify(data);
const encoder = new TextEncoder();
return encoder.encode(json);
},
deserialize: (data: Uint8Array) => {
const decoder = new TextDecoder();
const json = decoder.decode(data);
return JSON.parse(json);
},
getSupportedType: () => 'scene'
}
];
}
getSerializers(): ISerializer[] {
return [
{
serialize: (data: any) => {
const json = JSON.stringify(data);
const encoder = new TextEncoder();
return encoder.encode(json);
},
deserialize: (data: Uint8Array) => {
const decoder = new TextDecoder();
const json = decoder.decode(data);
return JSON.parse(json);
},
getSupportedType: () => 'scene'
}
];
}
async onEditorReady(): Promise<void> {
console.log('[SceneInspectorPlugin] Editor is ready');
}
async onEditorReady(): Promise<void> {
console.log('[SceneInspectorPlugin] Editor is ready');
}
async onProjectOpen(projectPath: string): Promise<void> {
console.log(`[SceneInspectorPlugin] Project opened: ${projectPath}`);
}
async onProjectOpen(projectPath: string): Promise<void> {
console.log(`[SceneInspectorPlugin] Project opened: ${projectPath}`);
}
async onProjectClose(): Promise<void> {
console.log('[SceneInspectorPlugin] Project closed');
}
async onProjectClose(): Promise<void> {
console.log('[SceneInspectorPlugin] Project closed');
}
}