Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { DisposableObject } from "../../common/disposable-object";
import { MethodModelingViewProvider } from "./method-modeling-view-provider";
import { Method } from "../method";
import { ModelingStore } from "../modeling-store";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
import { ModelConfigListener } from "../../config";
import { DatabaseItem } from "../../databases/local-databases";
import { ModelingEvents } from "../modeling-events";
Expand All @@ -16,7 +15,6 @@ export class MethodModelingPanel extends DisposableObject {
app: App,
modelingStore: ModelingStore,
modelingEvents: ModelingEvents,
editorViewTracker: ModelEditorViewTracker,
) {
super();

Expand All @@ -29,7 +27,6 @@ export class MethodModelingPanel extends DisposableObject {
app,
modelingStore,
modelingEvents,
editorViewTracker,
modelConfig,
);
this.push(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { Method } from "../method";
import { ModelingStore } from "../modeling-store";
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
import { assertNever } from "../../common/helpers-pure";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
import { ModelConfigListener } from "../../config";
import { DatabaseItem } from "../../databases/local-databases";
import { ModelingEvents } from "../modeling-events";
Expand All @@ -33,7 +32,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
app: App,
private readonly modelingStore: ModelingStore,
private readonly modelingEvents: ModelingEvents,
private readonly editorViewTracker: ModelEditorViewTracker,
private readonly modelConfig: ModelConfigListener,
) {
super(app, "method-modeling");
Expand Down Expand Up @@ -158,10 +156,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
return;
}

const view = this.editorViewTracker.getView(
this.modelingEvents.fireRevealInModelEditorEvent(
this.databaseItem.databaseUri.toString(),
method,
);
await view?.revealMethod(method);
}

private registerToModelingEvents(): void {
Expand Down
31 changes: 9 additions & 22 deletions extensions/ql-vscode/src/model-editor/model-editor-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import { setUpPack } from "./model-editor-queries-setup";
import { MethodModelingPanel } from "./method-modeling/method-modeling-panel";
import { ModelingStore } from "./modeling-store";
import { showResolvableLocation } from "../databases/local-databases/locations";
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import { ModelConfigListener } from "../config";
import { ModelingEvents } from "./modeling-events";
import { getModelsAsDataLanguage } from "./languages";
Expand All @@ -30,7 +29,6 @@ export class ModelEditorModule extends DisposableObject {
private readonly queryStorageDir: string;
private readonly modelingStore: ModelingStore;
private readonly modelingEvents: ModelingEvents;
private readonly editorViewTracker: ModelEditorViewTracker<ModelEditorView>;
private readonly methodsUsagePanel: MethodsUsagePanel;
private readonly methodModelingPanel: MethodModelingPanel;
private readonly modelConfig: ModelConfigListener;
Expand All @@ -46,17 +44,11 @@ export class ModelEditorModule extends DisposableObject {
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
this.modelingEvents = new ModelingEvents(app);
this.modelingStore = new ModelingStore(this.modelingEvents);
this.editorViewTracker = new ModelEditorViewTracker();
this.methodsUsagePanel = this.push(
new MethodsUsagePanel(this.modelingStore, this.modelingEvents, cliServer),
);
this.methodModelingPanel = this.push(
new MethodModelingPanel(
app,
this.modelingStore,
this.modelingEvents,
this.editorViewTracker,
),
new MethodModelingPanel(app, this.modelingStore, this.modelingEvents),
);
this.modelConfig = this.push(new ModelConfigListener());

Expand Down Expand Up @@ -144,12 +136,10 @@ export class ModelEditorModule extends DisposableObject {

const initialMode = definition.availableModes?.[0] ?? INITIAL_MODE;

const existingView = this.editorViewTracker.getView(
db.databaseUri.toString(),
);
if (existingView) {
await existingView.focusView();

if (this.modelingStore.isDbOpen(db.databaseUri.toString())) {
this.modelingEvents.fireFocusModelEditorEvent(
db.databaseUri.toString(),
);
return;
}

Expand Down Expand Up @@ -218,20 +208,17 @@ export class ModelEditorModule extends DisposableObject {

// Check again just before opening the editor to ensure no model editor has been opened between
// our first check and now.
const existingView = this.editorViewTracker.getView(
db.databaseUri.toString(),
);
if (existingView) {
await existingView.focusView();

if (this.modelingStore.isDbOpen(db.databaseUri.toString())) {
this.modelingEvents.fireFocusModelEditorEvent(
db.databaseUri.toString(),
);
return;
}

const view = new ModelEditorView(
this.app,
this.modelingStore,
this.modelingEvents,
this.editorViewTracker,
this.modelConfig,
this.databaseManager,
this.cliServer,
Expand Down

This file was deleted.

40 changes: 22 additions & 18 deletions extensions/ql-vscode/src/model-editor/model-editor-view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ import {
import { AutoModeler } from "./auto-modeler";
import { telemetryListener } from "../common/vscode/telemetry";
import { ModelingStore } from "./modeling-store";
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import { ModelingEvents } from "./modeling-events";
import { getModelsAsDataLanguage, ModelsAsDataLanguage } from "./languages";
import { runGenerateQueries } from "./generate";
Expand All @@ -60,7 +59,6 @@ export class ModelEditorView extends AbstractWebview<
protected readonly app: App,
private readonly modelingStore: ModelingStore,
private readonly modelingEvents: ModelingEvents,
private readonly viewTracker: ModelEditorViewTracker<ModelEditorView>,
private readonly modelConfig: ModelConfigListener,
private readonly databaseManager: DatabaseManager,
private readonly cliServer: CodeQLCliServer,
Expand All @@ -79,8 +77,6 @@ export class ModelEditorView extends AbstractWebview<
this.registerToModelingEvents();
this.registerToModelConfigEvents();

this.viewTracker.registerView(this);

this.autoModeler = new AutoModeler(
app,
cliServer,
Expand Down Expand Up @@ -166,7 +162,7 @@ export class ModelEditorView extends AbstractWebview<
}

protected onPanelDispose(): void {
this.viewTracker.unregisterView(this);
// Nothing to do
}

protected async onMessage(msg: FromModelEditorMessage): Promise<void> {
Expand Down Expand Up @@ -573,12 +569,9 @@ export class ModelEditorView extends AbstractWebview<
return;
}

let existingView = this.viewTracker.getView(
addedDatabase.databaseUri.toString(),
);
if (existingView) {
await existingView.focusView();

const addedDbUri = addedDatabase.databaseUri.toString();
if (this.modelingStore.isDbOpen(addedDbUri)) {
this.modelingEvents.fireFocusModelEditorEvent(addedDbUri);
return;
}

Expand All @@ -596,20 +589,15 @@ export class ModelEditorView extends AbstractWebview<

// Check again just before opening the editor to ensure no model editor has been opened between
// our first check and now.
existingView = this.viewTracker.getView(
addedDatabase.databaseUri.toString(),
);
if (existingView) {
await existingView.focusView();

if (this.modelingStore.isDbOpen(addedDbUri)) {
this.modelingEvents.fireFocusModelEditorEvent(addedDbUri);
return;
}

const view = new ModelEditorView(
this.app,
this.modelingStore,
this.modelingEvents,
this.viewTracker,
this.modelConfig,
this.databaseManager,
this.cliServer,
Expand Down Expand Up @@ -742,6 +730,22 @@ export class ModelEditorView extends AbstractWebview<
}
}),
);

this.push(
this.modelingEvents.onRevealInModelEditor(async (event) => {
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
await this.revealMethod(event.method);
}
}),
);

this.push(
this.modelingEvents.onFocusModelEditor(async (event) => {
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
await this.focusView();
}
}),
);
}

private registerToModelConfigEvents() {
Expand Down
36 changes: 36 additions & 0 deletions extensions/ql-vscode/src/model-editor/modeling-events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ interface InProgressMethodsChangedEvent {
readonly methods: ReadonlySet<string>;
}

interface RevealInModelEditorEvent {
dbUri: string;
method: Method;
}

interface FocusModelEditorEvent {
dbUri: string;
}

export class ModelingEvents extends DisposableObject {
public readonly onActiveDbChanged: AppEvent<void>;
public readonly onDbOpened: AppEvent<DatabaseItem>;
Expand All @@ -59,6 +68,8 @@ export class ModelingEvents extends DisposableObject {
public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>;
public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>;
public readonly onInProgressMethodsChanged: AppEvent<InProgressMethodsChangedEvent>;
public readonly onRevealInModelEditor: AppEvent<RevealInModelEditorEvent>;
public readonly onFocusModelEditor: AppEvent<FocusModelEditorEvent>;

private readonly onActiveDbChangedEventEmitter: AppEventEmitter<void>;
private readonly onDbOpenedEventEmitter: AppEventEmitter<DatabaseItem>;
Expand All @@ -70,6 +81,8 @@ export class ModelingEvents extends DisposableObject {
private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>;
private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>;
private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter<InProgressMethodsChangedEvent>;
private readonly onRevealInModelEditorEventEmitter: AppEventEmitter<RevealInModelEditorEvent>;
private readonly onFocusModelEditorEventEmitter: AppEventEmitter<FocusModelEditorEvent>;

constructor(app: App) {
super();
Expand Down Expand Up @@ -126,6 +139,16 @@ export class ModelingEvents extends DisposableObject {
);
this.onInProgressMethodsChanged =
this.onInProgressMethodsChangedEventEmitter.event;

this.onRevealInModelEditorEventEmitter = this.push(
app.createEventEmitter<RevealInModelEditorEvent>(),
);
this.onRevealInModelEditor = this.onRevealInModelEditorEventEmitter.event;

this.onFocusModelEditorEventEmitter = this.push(
app.createEventEmitter<FocusModelEditorEvent>(),
);
this.onFocusModelEditor = this.onFocusModelEditorEventEmitter.event;
}

public fireActiveDbChangedEvent() {
Expand Down Expand Up @@ -220,4 +243,17 @@ export class ModelingEvents extends DisposableObject {
methods,
});
}

public fireRevealInModelEditorEvent(dbUri: string, method: Method) {
this.onRevealInModelEditorEventEmitter.fire({
dbUri,
method,
});
}

public fireFocusModelEditorEvent(dbUri: string) {
this.onFocusModelEditorEventEmitter.fire({
dbUri,
});
}
}
4 changes: 4 additions & 0 deletions extensions/ql-vscode/src/model-editor/modeling-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ export class ModelingStore extends DisposableObject {
return this.state.size > 0;
}

public isDbOpen(dbUri: string): boolean {
return this.state.has(dbUri);
Comment thread
charisk marked this conversation as resolved.
}

/**
* Returns the method for the given database item and method signature.
* Returns undefined if no method exists with that signature.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ export function createMockModelingEvents({
onModeledMethodsChanged = jest.fn(),
onModifiedMethodsChanged = jest.fn(),
onInProgressMethodsChanged = jest.fn(),
onRevealInModelEditor = jest.fn(),
onFocusModelEditor = jest.fn(),
}: {
onActiveDbChanged?: ModelingEvents["onActiveDbChanged"];
onDbClosed?: ModelingEvents["onDbClosed"];
Expand All @@ -19,6 +21,8 @@ export function createMockModelingEvents({
onModeledMethodsChanged?: ModelingEvents["onModeledMethodsChanged"];
onModifiedMethodsChanged?: ModelingEvents["onModifiedMethodsChanged"];
onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"];
onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"];
onFocusModelEditor?: ModelingEvents["onFocusModelEditor"];
} = {}): ModelingEvents {
return mockedObject<ModelingEvents>({
onActiveDbChanged,
Expand All @@ -29,5 +33,7 @@ export function createMockModelingEvents({
onModeledMethodsChanged,
onModifiedMethodsChanged,
onInProgressMethodsChanged,
onRevealInModelEditor,
onFocusModelEditor,
});
}
Loading