Skip to content

Commit

Permalink
move things into proper folders, edit webpack config
Browse files Browse the repository at this point in the history
  • Loading branch information
hahnbeelee committed Jul 12, 2022
1 parent a7dddb6 commit 1dbb8da
Show file tree
Hide file tree
Showing 31 changed files with 8,520 additions and 174 deletions.
2 changes: 1 addition & 1 deletion vscode/src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as vscode from 'vscode';
import { Doc, ViewProvider } from './components/viewProvider';
import { linkCodeCommand, linkDirCommand, refreshLinksCommand, openDocsCommand } from './components/commands';
import { registerAuthRoute } from './components/authentication';
import { registerAuthRoute } from './mintlify-functionality/authentication';
import DocCodeLensProvider from './components/codeLensProvider';
import GlobalState from './utils/globalState';
import { doRegisterBuiltinGitProvider } from './utils/git/builtInGit';
Expand Down
109 changes: 109 additions & 0 deletions vscode/src/mintlify-codelens/codeLensController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import { ConfigurationChangeEvent, Disposable, languages } from 'vscode';
import { configuration } from '../configuration';
import { ContextKeys } from '../constants';
import { Container } from '../container';
import { setContext } from '../context';
import { Logger } from '../logger';
import { once } from '../system/event';
import {
DocumentBlameStateChangeEvent,
DocumentDirtyIdleTriggerEvent,
GitDocumentState,
} from '../trackers/gitDocumentTracker';
import { DocCodeLensProvider } from './codeLensProvider';

export class DocCodeLensController implements Disposable {
private _canToggle: boolean = false;
private _disposable: Disposable | undefined;
private _provider: DocCodeLensProvider | undefined;
private _providerDisposable: Disposable | undefined;

constructor(private readonly container: Container) {
this._disposable = Disposable.from(
once(container.onReady)(this.onReady, this),
configuration.onDidChange(this.onConfigurationChanged, this),
);
}

dispose() {
this._providerDisposable?.dispose();
this._disposable?.dispose();
}

private onReady(): void {
this.onConfigurationChanged();
}

private onConfigurationChanged(e?: ConfigurationChangeEvent) {
if (
configuration.changed(e, 'codeLens') ||
configuration.changed(e, 'defaultDateFormat') ||
configuration.changed(e, 'defaultDateSource') ||
configuration.changed(e, 'defaultDateStyle')
) {
if (e != null) {
Logger.log('CodeLens config changed; resetting CodeLens provider');
}

const cfg = this.container.config.codeLens;
if (cfg.enabled && (cfg.recentChange.enabled || cfg.authors.enabled)) {
this.ensureProvider();
} else {
this._providerDisposable?.dispose();
this._provider = undefined;
}

this._canToggle = cfg.recentChange.enabled || cfg.authors.enabled;
void setContext(ContextKeys.DisabledToggleCodeLens, !this._canToggle);
}
}

private onBlameStateChanged(e: DocumentBlameStateChangeEvent<GitDocumentState>) {
// Only reset if we have saved, since the CodeLens won't naturally be re-rendered
if (this._provider === undefined || !e.blameable) return;

Logger.log('Blame state changed; resetting CodeLens provider');
this._provider.reset('saved');
}

private onDirtyIdleTriggered(e: DocumentDirtyIdleTriggerEvent<GitDocumentState>) {
if (this._provider === undefined || !e.document.isBlameable) return;

const maxLines = this.container.config.advanced.blame.sizeThresholdAfterEdit;
if (maxLines > 0 && e.document.lineCount > maxLines) return;

Logger.log('Dirty idle triggered; resetting CodeLens provider');
this._provider.reset('idle');
}

toggleCodeLens() {
if (!this._canToggle) return;

Logger.log('toggleCodeLens()');
if (this._provider !== undefined) {
this._providerDisposable?.dispose();
this._provider = undefined;

return;
}

this.ensureProvider();
}

private ensureProvider() {
if (this._provider !== undefined) {
this._provider.reset();

return;
}

this._providerDisposable?.dispose();

this._provider = new DocCodeLensProvider(this.container);
this._providerDisposable = Disposable.from(
languages.registerCodeLensProvider(DocCodeLensProvider.selector, this._provider),
this.container.tracker.onDidChangeBlameState(this.onBlameStateChanged, this),
this.container.tracker.onDidTriggerDirtyIdle(this.onDirtyIdleTriggered, this),
);
}
}
Loading

0 comments on commit 1dbb8da

Please sign in to comment.