-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextension.js
More file actions
154 lines (154 loc) · 6.19 KB
/
Copy pathextension.js
File metadata and controls
154 lines (154 loc) · 6.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"use strict";
// # CommentStyle Extension
// Entry point — registers all providers, commands, and event listeners.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.activate = activate;
exports.deactivate = deactivate;
const vscode = __importStar(require("vscode"));
const parser_1 = require("./parser");
const decorator_1 = require("./decorator");
const treeProvider_1 = require("./treeProvider");
const foldingProvider_1 = require("./foldingProvider");
// --- State ---
let decorator;
let outlineProvider;
let enabled = true;
let debounceTimer;
// --- Helpers ---
function getConfig() {
return vscode.workspace.getConfiguration('commentstyle');
}
function getLines(doc) {
return Array.from({ length: doc.lineCount }, (_, i) => doc.lineAt(i).text);
}
// @param editor vscode.TextEditor - target editor
function runOnEditor(editor) {
if (!enabled) {
decorator.clearDecorations(editor);
return;
}
const doc = editor.document;
const parsed = (0, parser_1.parseDocument)(getLines(doc), doc.languageId);
decorator.applyDecorations(editor, parsed);
outlineProvider.refresh(parsed, doc.uri.fsPath);
}
function runDebounced(editor) {
if (debounceTimer)
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => runOnEditor(editor), 150);
}
// --- Activation ---
function activate(context) {
const config = getConfig();
enabled = config.get('enabled', true);
const theme = config.get('theme', 'dark');
// -- Init providers
decorator = new decorator_1.CommentDecorator(theme);
outlineProvider = new treeProvider_1.CommentOutlineProvider();
const foldingProvider = new foldingProvider_1.CommentFoldingProvider();
// -- Register TreeView
const treeView = vscode.window.createTreeView('commentstyle.outline', {
treeDataProvider: outlineProvider,
showCollapseAll: true,
});
// -- Register folding for all languages
const foldingDisposable = vscode.languages.registerFoldingRangeProvider({ scheme: 'file' }, foldingProvider);
// -- Commands
// Toggle styling on/off
const toggleCmd = vscode.commands.registerCommand('commentstyle.toggle', () => {
enabled = !enabled;
const editor = vscode.window.activeTextEditor;
if (editor)
runOnEditor(editor);
vscode.window.setStatusBarMessage(`CommentStyle: ${enabled ? '✅ On' : '⬜ Off'}`, 2500);
});
// Refresh outline manually
const refreshCmd = vscode.commands.registerCommand('commentstyle.refresh', () => {
const editor = vscode.window.activeTextEditor;
if (editor)
runOnEditor(editor);
});
// Jump to line (used by TreeView node clicks)
const jumpCmd = vscode.commands.registerCommand('commentstyle.jumpToLine', async (filePath, lineNumber) => {
const uri = vscode.Uri.file(filePath);
const doc = await vscode.workspace.openTextDocument(uri);
const editor = await vscode.window.showTextDocument(doc);
const pos = new vscode.Position(lineNumber, 0);
editor.selection = new vscode.Selection(pos, pos);
editor.revealRange(new vscode.Range(pos, pos), vscode.TextEditorRevealType.InCenter);
});
// -- Status Bar Toggle Button
const statusItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
statusItem.text = '$(symbol-color) CS';
statusItem.tooltip = 'CommentStyle — click to toggle (Ctrl+Shift+;)';
statusItem.command = 'commentstyle.toggle';
statusItem.show();
// -- Event Listeners
// Active editor changed
const onEditorChange = vscode.window.onDidChangeActiveTextEditor(editor => {
if (editor)
runOnEditor(editor);
});
// Document edited
const onDocChange = vscode.workspace.onDidChangeTextDocument(e => {
const editor = vscode.window.activeTextEditor;
if (editor && e.document === editor.document) {
runDebounced(editor);
}
});
// Config changed (theme switch etc.)
const onConfigChange = vscode.workspace.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('commentstyle')) {
const cfg = getConfig();
enabled = cfg.get('enabled', true);
const newTheme = cfg.get('theme', 'dark');
decorator.updateTheme(newTheme);
const editor = vscode.window.activeTextEditor;
if (editor)
runOnEditor(editor);
}
});
// -- Run immediately on the current editor
if (vscode.window.activeTextEditor) {
runOnEditor(vscode.window.activeTextEditor);
}
// -- Register all disposables
context.subscriptions.push(treeView, foldingDisposable, toggleCmd, refreshCmd, jumpCmd, statusItem, onEditorChange, onDocChange, onConfigChange, { dispose: () => decorator.disposeAll() });
}
function deactivate() {
decorator?.disposeAll();
}
//# sourceMappingURL=extension.js.map