hledger-lsp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +632 -0
- package/out/extension.d.ts +1 -0
- package/out/extension.d.ts.map +1 -0
- package/out/extension.js +2 -0
- package/out/extension.js.map +1 -0
- package/out/features/codeActions.d.ts +73 -0
- package/out/features/codeActions.d.ts.map +1 -0
- package/out/features/codeActions.js +417 -0
- package/out/features/codeActions.js.map +1 -0
- package/out/features/completion.d.ts +94 -0
- package/out/features/completion.d.ts.map +1 -0
- package/out/features/completion.js +323 -0
- package/out/features/completion.js.map +1 -0
- package/out/features/definition.d.ts +12 -0
- package/out/features/definition.d.ts.map +1 -0
- package/out/features/definition.js +61 -0
- package/out/features/definition.js.map +1 -0
- package/out/features/documentLinks.d.ts +17 -0
- package/out/features/documentLinks.d.ts.map +1 -0
- package/out/features/documentLinks.js +68 -0
- package/out/features/documentLinks.js.map +1 -0
- package/out/features/findReferences.d.ts +33 -0
- package/out/features/findReferences.d.ts.map +1 -0
- package/out/features/findReferences.js +79 -0
- package/out/features/findReferences.js.map +1 -0
- package/out/features/foldingRanges.d.ts +27 -0
- package/out/features/foldingRanges.d.ts.map +1 -0
- package/out/features/foldingRanges.js +111 -0
- package/out/features/foldingRanges.js.map +1 -0
- package/out/features/formatter.d.ts +70 -0
- package/out/features/formatter.d.ts.map +1 -0
- package/out/features/formatter.js +373 -0
- package/out/features/formatter.js.map +1 -0
- package/out/features/hover.d.ts +66 -0
- package/out/features/hover.d.ts.map +1 -0
- package/out/features/hover.js +387 -0
- package/out/features/hover.js.map +1 -0
- package/out/features/inlayHints.d.ts +43 -0
- package/out/features/inlayHints.d.ts.map +1 -0
- package/out/features/inlayHints.js +221 -0
- package/out/features/inlayHints.js.map +1 -0
- package/out/features/selectionRange.d.ts +47 -0
- package/out/features/selectionRange.d.ts.map +1 -0
- package/out/features/selectionRange.js +273 -0
- package/out/features/selectionRange.js.map +1 -0
- package/out/features/semanticTokens.d.ts +83 -0
- package/out/features/semanticTokens.d.ts.map +1 -0
- package/out/features/semanticTokens.js +370 -0
- package/out/features/semanticTokens.js.map +1 -0
- package/out/features/symbols.d.ts +47 -0
- package/out/features/symbols.d.ts.map +1 -0
- package/out/features/symbols.js +249 -0
- package/out/features/symbols.js.map +1 -0
- package/out/features/transactionAnalyzer.d.ts +63 -0
- package/out/features/transactionAnalyzer.d.ts.map +1 -0
- package/out/features/transactionAnalyzer.js +127 -0
- package/out/features/transactionAnalyzer.js.map +1 -0
- package/out/features/validator.d.ts +142 -0
- package/out/features/validator.d.ts.map +1 -0
- package/out/features/validator.js +633 -0
- package/out/features/validator.js.map +1 -0
- package/out/parser/ast.d.ts +37 -0
- package/out/parser/ast.d.ts.map +1 -0
- package/out/parser/ast.js +606 -0
- package/out/parser/ast.js.map +1 -0
- package/out/parser/includes.d.ts +25 -0
- package/out/parser/includes.d.ts.map +1 -0
- package/out/parser/includes.js +106 -0
- package/out/parser/includes.js.map +1 -0
- package/out/parser/index.d.ts +54 -0
- package/out/parser/index.d.ts.map +1 -0
- package/out/parser/index.js +146 -0
- package/out/parser/index.js.map +1 -0
- package/out/server/deps.d.ts +19 -0
- package/out/server/deps.d.ts.map +1 -0
- package/out/server/deps.js +77 -0
- package/out/server/deps.js.map +1 -0
- package/out/server/settings.d.ts +60 -0
- package/out/server/settings.d.ts.map +1 -0
- package/out/server/settings.js +110 -0
- package/out/server/settings.js.map +1 -0
- package/out/server.d.ts +3 -0
- package/out/server.d.ts.map +1 -0
- package/out/server.js +420 -0
- package/out/server.js.map +1 -0
- package/out/types.d.ts +84 -0
- package/out/types.d.ts.map +1 -0
- package/out/types.js +6 -0
- package/out/types.js.map +1 -0
- package/out/utils/index.d.ts +38 -0
- package/out/utils/index.d.ts.map +1 -0
- package/out/utils/index.js +89 -0
- package/out/utils/index.js.map +1 -0
- package/out/utils/uri.d.ts +32 -0
- package/out/utils/uri.d.ts.map +1 -0
- package/out/utils/uri.js +215 -0
- package/out/utils/uri.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultSettings = void 0;
|
|
4
|
+
exports.getDocumentSettings = getDocumentSettings;
|
|
5
|
+
exports.clearDocumentSettings = clearDocumentSettings;
|
|
6
|
+
exports.clearAllDocumentSettings = clearAllDocumentSettings;
|
|
7
|
+
exports.defaultSettings = {
|
|
8
|
+
maxNumberOfProblems: 1000,
|
|
9
|
+
hledgerPath: 'hledger',
|
|
10
|
+
validation: {
|
|
11
|
+
balance: true,
|
|
12
|
+
missingAmounts: true,
|
|
13
|
+
undeclaredAccounts: true,
|
|
14
|
+
undeclaredPayees: false,
|
|
15
|
+
undeclaredCommodities: true,
|
|
16
|
+
undeclaredTags: true,
|
|
17
|
+
dateOrdering: true,
|
|
18
|
+
balanceAssertions: true,
|
|
19
|
+
emptyTransactions: true,
|
|
20
|
+
invalidDates: true,
|
|
21
|
+
futureDates: true,
|
|
22
|
+
emptyDescriptions: true,
|
|
23
|
+
includeFiles: true,
|
|
24
|
+
circularIncludes: true,
|
|
25
|
+
},
|
|
26
|
+
severity: {
|
|
27
|
+
undeclaredAccounts: 'warning',
|
|
28
|
+
undeclaredPayees: 'warning',
|
|
29
|
+
undeclaredCommodities: 'warning',
|
|
30
|
+
undeclaredTags: 'information',
|
|
31
|
+
},
|
|
32
|
+
include: {
|
|
33
|
+
followIncludes: true,
|
|
34
|
+
maxDepth: 10,
|
|
35
|
+
},
|
|
36
|
+
completion: {
|
|
37
|
+
onlyDeclaredAccounts: true,
|
|
38
|
+
onlyDeclaredPayees: true,
|
|
39
|
+
onlyDeclaredCommodities: true,
|
|
40
|
+
onlyDeclaredTags: true,
|
|
41
|
+
},
|
|
42
|
+
formatting: {
|
|
43
|
+
indentation: 4,
|
|
44
|
+
maxAccountWidth: 42,
|
|
45
|
+
maxCommodityWidth: 4,
|
|
46
|
+
maxAmountWidth: 12,
|
|
47
|
+
minSpacing: 2,
|
|
48
|
+
decimalAlignColumn: 52,
|
|
49
|
+
assertionDecimalAlignColumn: 70,
|
|
50
|
+
},
|
|
51
|
+
inlayHints: {
|
|
52
|
+
showInferredAmounts: true,
|
|
53
|
+
showRunningBalances: true,
|
|
54
|
+
showCostConversions: true,
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// Cache the settings of all open documents
|
|
58
|
+
const documentSettings = new Map();
|
|
59
|
+
/**
|
|
60
|
+
* Deep merge two objects, with values from 'source' overriding 'target'
|
|
61
|
+
*/
|
|
62
|
+
function deepMerge(target, source) {
|
|
63
|
+
const result = { ...target };
|
|
64
|
+
for (const key in source) {
|
|
65
|
+
if (source.hasOwnProperty(key)) {
|
|
66
|
+
const sourceValue = source[key];
|
|
67
|
+
const targetValue = result[key];
|
|
68
|
+
if (sourceValue !== undefined && targetValue !== undefined &&
|
|
69
|
+
typeof sourceValue === 'object' && typeof targetValue === 'object' &&
|
|
70
|
+
!Array.isArray(sourceValue) && !Array.isArray(targetValue)) {
|
|
71
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
72
|
+
}
|
|
73
|
+
else if (sourceValue !== undefined) {
|
|
74
|
+
result[key] = sourceValue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get settings for a document. If the client does not support workspace/configuration
|
|
82
|
+
* the default settings are returned.
|
|
83
|
+
*/
|
|
84
|
+
function getDocumentSettings(connection, resource, hasConfigurationCapability) {
|
|
85
|
+
if (!hasConfigurationCapability) {
|
|
86
|
+
return Promise.resolve(exports.defaultSettings);
|
|
87
|
+
}
|
|
88
|
+
let result = documentSettings.get(resource);
|
|
89
|
+
if (!result) {
|
|
90
|
+
result = connection.workspace.getConfiguration({
|
|
91
|
+
scopeUri: resource,
|
|
92
|
+
section: 'hledgerLanguageServer'
|
|
93
|
+
}).then((userSettings) => {
|
|
94
|
+
// Merge user settings with defaults so unspecified settings use default values
|
|
95
|
+
const merged = deepMerge(exports.defaultSettings, userSettings || {});
|
|
96
|
+
// Lightweight log to verify that configuration is flowing from the client
|
|
97
|
+
connection.console.log(`Loaded hledgerLanguageServer settings for ${resource}: ${JSON.stringify(userSettings || {})}`);
|
|
98
|
+
return merged;
|
|
99
|
+
});
|
|
100
|
+
documentSettings.set(resource, result);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
function clearDocumentSettings(resource) {
|
|
105
|
+
documentSettings.delete(resource);
|
|
106
|
+
}
|
|
107
|
+
function clearAllDocumentSettings() {
|
|
108
|
+
documentSettings.clear();
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/server/settings.ts"],"names":[],"mappings":"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"}
|
package/out/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/out/server.js
ADDED
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const node_1 = require("vscode-languageserver/node");
|
|
5
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
6
|
+
const completion_1 = require("./features/completion");
|
|
7
|
+
const hover_1 = require("./features/hover");
|
|
8
|
+
const definition_1 = require("./features/definition");
|
|
9
|
+
const symbols_1 = require("./features/symbols");
|
|
10
|
+
const codeActions_1 = require("./features/codeActions");
|
|
11
|
+
const formatter_1 = require("./features/formatter");
|
|
12
|
+
const semanticTokens_1 = require("./features/semanticTokens");
|
|
13
|
+
const inlayHints_1 = require("./features/inlayHints");
|
|
14
|
+
const findReferences_1 = require("./features/findReferences");
|
|
15
|
+
const validator_1 = require("./features/validator");
|
|
16
|
+
const foldingRanges_1 = require("./features/foldingRanges");
|
|
17
|
+
const documentLinks_1 = require("./features/documentLinks");
|
|
18
|
+
const selectionRange_1 = require("./features/selectionRange");
|
|
19
|
+
const index_1 = require("./parser/index");
|
|
20
|
+
const settings_1 = require("./server/settings");
|
|
21
|
+
const uri_1 = require("./utils/uri");
|
|
22
|
+
// Create a connection for the server using Node's IPC as a transport
|
|
23
|
+
const connection = (0, node_1.createConnection)(node_1.ProposedFeatures.all);
|
|
24
|
+
// Create a simple text document manager
|
|
25
|
+
const documents = new node_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
|
|
26
|
+
let hasConfigurationCapability = false;
|
|
27
|
+
let hasWorkspaceFolderCapability = false;
|
|
28
|
+
let hasDiagnosticRelatedInformationCapability = false;
|
|
29
|
+
let hasDidChangeConfigurationDynamicRegistration = false;
|
|
30
|
+
let hasWorkspaceFoldersDynamicRegistration = false;
|
|
31
|
+
connection.onInitialize((params) => {
|
|
32
|
+
const capabilities = params.capabilities;
|
|
33
|
+
// Does the client support the `workspace/configuration` request?
|
|
34
|
+
hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
|
|
35
|
+
hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
|
|
36
|
+
hasDiagnosticRelatedInformationCapability = !!(capabilities.textDocument &&
|
|
37
|
+
capabilities.textDocument.publishDiagnostics &&
|
|
38
|
+
capabilities.textDocument.publishDiagnostics.relatedInformation);
|
|
39
|
+
// Check if client supports dynamic registration for didChangeConfiguration
|
|
40
|
+
hasDidChangeConfigurationDynamicRegistration = !!(capabilities.workspace &&
|
|
41
|
+
capabilities.workspace.didChangeConfiguration &&
|
|
42
|
+
capabilities.workspace.didChangeConfiguration.dynamicRegistration);
|
|
43
|
+
// Check if client supports dynamic registration for workspace folders
|
|
44
|
+
// (Not currently used, kept for future reference)
|
|
45
|
+
hasWorkspaceFoldersDynamicRegistration = false;
|
|
46
|
+
const result = {
|
|
47
|
+
capabilities: {
|
|
48
|
+
textDocumentSync: node_1.TextDocumentSyncKind.Incremental,
|
|
49
|
+
// Tell the client that this server supports code completion
|
|
50
|
+
completionProvider: {
|
|
51
|
+
resolveProvider: true,
|
|
52
|
+
triggerCharacters: [':', ' ']
|
|
53
|
+
},
|
|
54
|
+
hoverProvider: true,
|
|
55
|
+
definitionProvider: true,
|
|
56
|
+
referencesProvider: true,
|
|
57
|
+
documentSymbolProvider: true,
|
|
58
|
+
workspaceSymbolProvider: true,
|
|
59
|
+
codeActionProvider: true,
|
|
60
|
+
documentFormattingProvider: true,
|
|
61
|
+
documentRangeFormattingProvider: true,
|
|
62
|
+
documentOnTypeFormattingProvider: {
|
|
63
|
+
firstTriggerCharacter: '\n',
|
|
64
|
+
},
|
|
65
|
+
semanticTokensProvider: {
|
|
66
|
+
legend: {
|
|
67
|
+
tokenTypes: semanticTokens_1.tokenTypes,
|
|
68
|
+
tokenModifiers: semanticTokens_1.tokenModifiers
|
|
69
|
+
},
|
|
70
|
+
full: true
|
|
71
|
+
},
|
|
72
|
+
inlayHintProvider: true,
|
|
73
|
+
renameProvider: {
|
|
74
|
+
prepareProvider: true
|
|
75
|
+
},
|
|
76
|
+
foldingRangeProvider: true,
|
|
77
|
+
documentLinkProvider: {
|
|
78
|
+
resolveProvider: false
|
|
79
|
+
},
|
|
80
|
+
selectionRangeProvider: true
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
// Note: Workspace folders support removed to avoid warnings with clients
|
|
84
|
+
// that don't support dynamic registration (like Neovim)
|
|
85
|
+
return result;
|
|
86
|
+
});
|
|
87
|
+
connection.onInitialized(() => {
|
|
88
|
+
// Only use dynamic registration if the client supports it
|
|
89
|
+
if (hasConfigurationCapability && hasDidChangeConfigurationDynamicRegistration) {
|
|
90
|
+
// Register for all configuration changes dynamically
|
|
91
|
+
connection.client.register(node_1.DidChangeConfigurationNotification.type, undefined);
|
|
92
|
+
}
|
|
93
|
+
connection.console.log('hledger Language Server initialized');
|
|
94
|
+
});
|
|
95
|
+
// Global settings used when client does not support workspace/configuration
|
|
96
|
+
let globalSettings = settings_1.defaultSettings;
|
|
97
|
+
// include dependency functions are centralized in src/server/deps.ts
|
|
98
|
+
const deps_1 = require("./server/deps");
|
|
99
|
+
// Create a shared parser instance with caching
|
|
100
|
+
const sharedParser = new index_1.HledgerParser();
|
|
101
|
+
// Small helper to centralize parsing options and reduce duplication across handlers
|
|
102
|
+
function parseDocument(document) {
|
|
103
|
+
return sharedParser.parse(document, {
|
|
104
|
+
baseUri: document.uri,
|
|
105
|
+
fileReader
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
connection.onDidChangeConfiguration(change => {
|
|
109
|
+
if (hasConfigurationCapability) {
|
|
110
|
+
// Reset all cached document settings
|
|
111
|
+
(0, settings_1.clearAllDocumentSettings)();
|
|
112
|
+
connection.console.log('hledger Language Server: configuration changed (workspace/configuration), clearing settings cache');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
globalSettings = ((change.settings.hledgerLanguageServer || settings_1.defaultSettings));
|
|
116
|
+
connection.console.log('hledger Language Server: configuration changed (legacy settings), updating global settings');
|
|
117
|
+
}
|
|
118
|
+
// Revalidate all open text documents
|
|
119
|
+
documents.all().forEach(validateTextDocument);
|
|
120
|
+
});
|
|
121
|
+
// Wrapper around settings module to use connection and capability flag
|
|
122
|
+
function getDocumentSettings(resource) {
|
|
123
|
+
return (0, settings_1.getDocumentSettings)(connection, resource, hasConfigurationCapability);
|
|
124
|
+
}
|
|
125
|
+
// Only keep settings for open documents
|
|
126
|
+
documents.onDidClose(e => {
|
|
127
|
+
(0, settings_1.clearDocumentSettings)(e.document.uri);
|
|
128
|
+
(0, deps_1.clearDependencies)(e.document.uri);
|
|
129
|
+
});
|
|
130
|
+
// The content of a text document has changed
|
|
131
|
+
documents.onDidChangeContent(change => {
|
|
132
|
+
// Clear parser cache since a file changed
|
|
133
|
+
// This ensures we re-parse files with fresh data
|
|
134
|
+
sharedParser.clearCache();
|
|
135
|
+
validateTextDocument(change.document);
|
|
136
|
+
// Re-validate all files that depend on this one
|
|
137
|
+
const dependents = (0, deps_1.getDependents)(change.document.uri);
|
|
138
|
+
if (dependents) {
|
|
139
|
+
for (const dependentUri of dependents) {
|
|
140
|
+
const dependentDoc = documents.get(dependentUri);
|
|
141
|
+
if (dependentDoc) {
|
|
142
|
+
validateTextDocument(dependentDoc);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
// dependency tracking moved to src/server/deps.ts
|
|
148
|
+
// Use centralized file reader implementation
|
|
149
|
+
const fileReader = uri_1.defaultFileReader;
|
|
150
|
+
async function validateTextDocument(textDocument) {
|
|
151
|
+
// Get document settings
|
|
152
|
+
const settings = (await getDocumentSettings(textDocument.uri)) ?? settings_1.defaultSettings;
|
|
153
|
+
// Parse the document with includes enabled (uses shared parser with caching)
|
|
154
|
+
const parsedDoc = parseDocument(textDocument);
|
|
155
|
+
// Track which files this document includes
|
|
156
|
+
const includedFiles = new Set();
|
|
157
|
+
for (const directive of parsedDoc.directives) {
|
|
158
|
+
if (directive.type === 'include') {
|
|
159
|
+
const resolvedPath = (0, uri_1.resolveIncludePath)(directive.value, textDocument.uri);
|
|
160
|
+
includedFiles.add(resolvedPath);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
(0, deps_1.updateDependencies)(textDocument.uri, includedFiles);
|
|
164
|
+
// Update completion data from the parsed document (includes all included files)
|
|
165
|
+
completion_1.completionProvider.updateAccounts(parsedDoc.accounts.map(a => ({ name: a.name, declared: a.declared })));
|
|
166
|
+
completion_1.completionProvider.updatePayees(parsedDoc.payees.map(p => ({ name: p.name, declared: p.declared })));
|
|
167
|
+
completion_1.completionProvider.updateCommodities(parsedDoc.commodities.map(c => ({ name: c.name, declared: c.declared })));
|
|
168
|
+
completion_1.completionProvider.updateTags(parsedDoc.tags.map(t => ({ name: t.name, declared: t.declared })));
|
|
169
|
+
// Validate the document with settings
|
|
170
|
+
const validationResult = validator_1.validator.validate(textDocument, parsedDoc, {
|
|
171
|
+
baseUri: textDocument.uri,
|
|
172
|
+
fileReader,
|
|
173
|
+
settings: {
|
|
174
|
+
validation: settings?.validation,
|
|
175
|
+
severity: settings?.severity
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
// Send diagnostics to the client
|
|
179
|
+
connection.sendDiagnostics({
|
|
180
|
+
uri: textDocument.uri,
|
|
181
|
+
diagnostics: validationResult.diagnostics
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// include path resolution moved to src/utils/uri.ts
|
|
185
|
+
// Provide completion items
|
|
186
|
+
connection.onCompletion(async (textDocumentPosition) => {
|
|
187
|
+
try {
|
|
188
|
+
const document = documents.get(textDocumentPosition.textDocument.uri);
|
|
189
|
+
if (!document) {
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
// Parse document for smart completions
|
|
193
|
+
const parsed = parseDocument(document);
|
|
194
|
+
// Get settings for completion filtering
|
|
195
|
+
const settings = await (0, settings_1.getDocumentSettings)(connection, textDocumentPosition.textDocument.uri, hasConfigurationCapability);
|
|
196
|
+
return completion_1.completionProvider.getCompletionItems(document, textDocumentPosition.position, parsed, settings?.completion);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
connection.console.error(`Error in completion: ${error}`);
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
// Resolve additional information for completion items
|
|
204
|
+
connection.onCompletionResolve((item) => {
|
|
205
|
+
// Completion items from CompletionProvider already have all necessary details
|
|
206
|
+
// This handler is kept for future extensibility
|
|
207
|
+
return item;
|
|
208
|
+
});
|
|
209
|
+
// Provide hover information
|
|
210
|
+
connection.onHover((params, token) => {
|
|
211
|
+
const document = documents.get(params.textDocument.uri);
|
|
212
|
+
if (!document)
|
|
213
|
+
return null;
|
|
214
|
+
const parsed = parseDocument(document);
|
|
215
|
+
const hover = hover_1.hoverProvider.provideHover(document, params.position.line, params.position.character, parsed);
|
|
216
|
+
return hover;
|
|
217
|
+
});
|
|
218
|
+
// Provide definition locations (go-to-definition)
|
|
219
|
+
connection.onDefinition((params) => {
|
|
220
|
+
const document = documents.get(params.textDocument.uri);
|
|
221
|
+
if (!document)
|
|
222
|
+
return null;
|
|
223
|
+
// Parse document with includes using server's fileReader
|
|
224
|
+
const parsed = parseDocument(document);
|
|
225
|
+
const loc = definition_1.definitionProvider.provideDefinition(document, params.position.line, params.position.character, parsed);
|
|
226
|
+
return loc ? [loc] : null;
|
|
227
|
+
});
|
|
228
|
+
// Provide references (find all usages)
|
|
229
|
+
connection.onReferences((params) => {
|
|
230
|
+
const document = documents.get(params.textDocument.uri);
|
|
231
|
+
if (!document)
|
|
232
|
+
return null;
|
|
233
|
+
// Parse document with includes using server's fileReader
|
|
234
|
+
const parsed = parseDocument(document);
|
|
235
|
+
return findReferences_1.findReferencesProvider.findReferences(document, params.position, parsed, params.context.includeDeclaration);
|
|
236
|
+
});
|
|
237
|
+
// Provide document symbols (outline view)
|
|
238
|
+
connection.onDocumentSymbol((params) => {
|
|
239
|
+
const document = documents.get(params.textDocument.uri);
|
|
240
|
+
if (!document)
|
|
241
|
+
return [];
|
|
242
|
+
// Parse document with includes using server's fileReader
|
|
243
|
+
const parsed = parseDocument(document);
|
|
244
|
+
return symbols_1.documentSymbolProvider.provideDocumentSymbols(document, parsed);
|
|
245
|
+
});
|
|
246
|
+
// Provide workspace symbols (project-wide search)
|
|
247
|
+
connection.onWorkspaceSymbol((params) => {
|
|
248
|
+
// Get any open document to serve as the entry point
|
|
249
|
+
// The parsed document will include all entities from all included files
|
|
250
|
+
const allDocuments = documents.all();
|
|
251
|
+
if (allDocuments.length === 0)
|
|
252
|
+
return [];
|
|
253
|
+
// Use the first document as the entry point for workspace-wide search
|
|
254
|
+
const document = allDocuments[0];
|
|
255
|
+
// Parse with includes to get all entities across the workspace
|
|
256
|
+
const parsed = parseDocument(document);
|
|
257
|
+
return symbols_1.workspaceSymbolProvider.provideWorkspaceSymbols(params.query, parsed);
|
|
258
|
+
});
|
|
259
|
+
// Provide code actions (quick fixes and refactorings)
|
|
260
|
+
connection.onCodeAction((params) => {
|
|
261
|
+
const document = documents.get(params.textDocument.uri);
|
|
262
|
+
if (!document)
|
|
263
|
+
return [];
|
|
264
|
+
// Parse document with includes
|
|
265
|
+
const parsed = parseDocument(document);
|
|
266
|
+
// Get diagnostics from the context
|
|
267
|
+
const diagnostics = params.context.diagnostics;
|
|
268
|
+
return codeActions_1.codeActionProvider.provideCodeActions(document, params.range, diagnostics, parsed);
|
|
269
|
+
});
|
|
270
|
+
// Provide document formatting
|
|
271
|
+
connection.onDocumentFormatting(async (params) => {
|
|
272
|
+
try {
|
|
273
|
+
const document = documents.get(params.textDocument.uri);
|
|
274
|
+
if (!document)
|
|
275
|
+
return [];
|
|
276
|
+
// Parse document
|
|
277
|
+
const parsed = parseDocument(document);
|
|
278
|
+
// Get formatting settings
|
|
279
|
+
const settings = await getDocumentSettings(params.textDocument.uri);
|
|
280
|
+
const formattingOptions = settings?.formatting || {};
|
|
281
|
+
return formatter_1.formattingProvider.formatDocument(document, parsed, params.options, formattingOptions);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
connection.console.error(`Error in document formatting: ${error}`);
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
// Provide range formatting
|
|
289
|
+
connection.onDocumentRangeFormatting(async (params) => {
|
|
290
|
+
try {
|
|
291
|
+
const document = documents.get(params.textDocument.uri);
|
|
292
|
+
if (!document)
|
|
293
|
+
return [];
|
|
294
|
+
// Parse document
|
|
295
|
+
const parsed = parseDocument(document);
|
|
296
|
+
// Get formatting settings
|
|
297
|
+
const settings = await getDocumentSettings(params.textDocument.uri);
|
|
298
|
+
const formattingOptions = settings?.formatting || {};
|
|
299
|
+
return formatter_1.formattingProvider.formatRange(document, params.range, parsed, params.options, formattingOptions);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
connection.console.error(`Error in range formatting: ${error}`);
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
// Provide on-type formatting
|
|
307
|
+
connection.onDocumentOnTypeFormatting(async (params) => {
|
|
308
|
+
try {
|
|
309
|
+
const document = documents.get(params.textDocument.uri);
|
|
310
|
+
if (!document)
|
|
311
|
+
return [];
|
|
312
|
+
// Parse document
|
|
313
|
+
const parsed = parseDocument(document);
|
|
314
|
+
// Get formatting settings
|
|
315
|
+
const settings = await getDocumentSettings(params.textDocument.uri);
|
|
316
|
+
const formattingOptions = settings?.formatting || {};
|
|
317
|
+
return formatter_1.formattingProvider.formatOnType(document, params.position, params.ch, parsed, params.options, formattingOptions);
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
connection.console.error(`Error in on-type formatting: ${error}`);
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
// Provide semantic tokens
|
|
325
|
+
connection.languages.semanticTokens.on((params) => {
|
|
326
|
+
const document = documents.get(params.textDocument.uri);
|
|
327
|
+
if (!document)
|
|
328
|
+
return { data: [] };
|
|
329
|
+
// Parse document
|
|
330
|
+
const parsed = parseDocument(document);
|
|
331
|
+
const data = semanticTokens_1.semanticTokensProvider.provideSemanticTokens(document, parsed);
|
|
332
|
+
return { data };
|
|
333
|
+
});
|
|
334
|
+
// Provide inlay hints
|
|
335
|
+
connection.languages.inlayHint.on(async (params) => {
|
|
336
|
+
try {
|
|
337
|
+
const document = documents.get(params.textDocument.uri);
|
|
338
|
+
if (!document)
|
|
339
|
+
return [];
|
|
340
|
+
// Parse document
|
|
341
|
+
const parsed = parseDocument(document);
|
|
342
|
+
// Get settings for inlay hints
|
|
343
|
+
const settings = await getDocumentSettings(params.textDocument.uri);
|
|
344
|
+
const inlayHintsSettings = settings?.inlayHints || undefined;
|
|
345
|
+
return inlayHints_1.inlayHintsProvider.provideInlayHints(document, params.range, parsed, inlayHintsSettings);
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
connection.console.error(`Error providing inlay hints: ${error}`);
|
|
349
|
+
return [];
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
// Prepare rename - validate that position is on a renameable item
|
|
353
|
+
connection.onPrepareRename((params) => {
|
|
354
|
+
const document = documents.get(params.textDocument.uri);
|
|
355
|
+
if (!document)
|
|
356
|
+
return null;
|
|
357
|
+
const parsed = parseDocument(document);
|
|
358
|
+
const item = codeActions_1.codeActionProvider.getItemAtCursor(document, params.position, parsed);
|
|
359
|
+
if (!item)
|
|
360
|
+
return null;
|
|
361
|
+
// Return the range and placeholder text
|
|
362
|
+
const line = document.getText().split('\n')[params.position.line];
|
|
363
|
+
if (!line)
|
|
364
|
+
return null;
|
|
365
|
+
// Find the item name in the line to get its range
|
|
366
|
+
const index = line.indexOf(item.name);
|
|
367
|
+
if (index === -1)
|
|
368
|
+
return null;
|
|
369
|
+
return {
|
|
370
|
+
range: {
|
|
371
|
+
start: { line: params.position.line, character: index },
|
|
372
|
+
end: { line: params.position.line, character: index + item.name.length }
|
|
373
|
+
},
|
|
374
|
+
placeholder: item.name
|
|
375
|
+
};
|
|
376
|
+
});
|
|
377
|
+
// Rename request - perform the actual rename
|
|
378
|
+
connection.onRenameRequest((params) => {
|
|
379
|
+
const document = documents.get(params.textDocument.uri);
|
|
380
|
+
if (!document)
|
|
381
|
+
return null;
|
|
382
|
+
const parsed = parseDocument(document);
|
|
383
|
+
const item = codeActions_1.codeActionProvider.getItemAtCursor(document, params.position, parsed);
|
|
384
|
+
if (!item)
|
|
385
|
+
return null;
|
|
386
|
+
// Create the workspace edit
|
|
387
|
+
return codeActions_1.codeActionProvider.createRenameEdit(document, item, params.newName, parsed);
|
|
388
|
+
});
|
|
389
|
+
// Provide folding ranges
|
|
390
|
+
connection.onFoldingRanges((params) => {
|
|
391
|
+
const document = documents.get(params.textDocument.uri);
|
|
392
|
+
if (!document)
|
|
393
|
+
return [];
|
|
394
|
+
// Parse document
|
|
395
|
+
const parsed = parseDocument(document);
|
|
396
|
+
return foldingRanges_1.foldingRangesProvider.provideFoldingRanges(document, parsed);
|
|
397
|
+
});
|
|
398
|
+
// Provide document links
|
|
399
|
+
connection.onDocumentLinks((params) => {
|
|
400
|
+
const document = documents.get(params.textDocument.uri);
|
|
401
|
+
if (!document)
|
|
402
|
+
return [];
|
|
403
|
+
// Parse document
|
|
404
|
+
const parsed = parseDocument(document);
|
|
405
|
+
return documentLinks_1.documentLinksProvider.provideDocumentLinks(document, parsed);
|
|
406
|
+
});
|
|
407
|
+
// Provide selection ranges
|
|
408
|
+
connection.onSelectionRanges((params) => {
|
|
409
|
+
const document = documents.get(params.textDocument.uri);
|
|
410
|
+
if (!document)
|
|
411
|
+
return [];
|
|
412
|
+
// Parse document
|
|
413
|
+
const parsed = parseDocument(document);
|
|
414
|
+
return selectionRange_1.selectionRangeProvider.provideSelectionRanges(document, params.positions, parsed) || [];
|
|
415
|
+
});
|
|
416
|
+
// Make the text document manager listen on the connection
|
|
417
|
+
documents.listen(connection);
|
|
418
|
+
// Listen on the connection
|
|
419
|
+
connection.listen();
|
|
420
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/out/types.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for hledger language structures
|
|
3
|
+
*/
|
|
4
|
+
export interface Transaction {
|
|
5
|
+
date: string;
|
|
6
|
+
effectiveDate?: string;
|
|
7
|
+
status?: 'cleared' | 'pending' | 'unmarked';
|
|
8
|
+
code?: string;
|
|
9
|
+
description: string;
|
|
10
|
+
payee: string;
|
|
11
|
+
note: string;
|
|
12
|
+
comment?: string;
|
|
13
|
+
postings: Posting[];
|
|
14
|
+
tags?: Record<string, string>;
|
|
15
|
+
sourceUri?: string;
|
|
16
|
+
line?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface Posting {
|
|
19
|
+
account: string;
|
|
20
|
+
amount?: Amount;
|
|
21
|
+
cost?: Cost;
|
|
22
|
+
assertion?: Amount;
|
|
23
|
+
comment?: string;
|
|
24
|
+
tags?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
export interface Amount {
|
|
27
|
+
quantity: number;
|
|
28
|
+
commodity: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Cost {
|
|
31
|
+
type: 'unit' | 'total';
|
|
32
|
+
amount: Amount;
|
|
33
|
+
}
|
|
34
|
+
export interface Account {
|
|
35
|
+
name: string;
|
|
36
|
+
declared: boolean;
|
|
37
|
+
type?: 'asset' | 'liability' | 'expense' | 'income' | 'equity';
|
|
38
|
+
parent?: string;
|
|
39
|
+
children?: string[];
|
|
40
|
+
sourceUri?: string;
|
|
41
|
+
line?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface Payee {
|
|
44
|
+
name: string;
|
|
45
|
+
declared: boolean;
|
|
46
|
+
sourceUri?: string;
|
|
47
|
+
line?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface Commodity {
|
|
50
|
+
name: string;
|
|
51
|
+
declared: boolean;
|
|
52
|
+
sourceUri?: string;
|
|
53
|
+
format?: {
|
|
54
|
+
symbol?: string;
|
|
55
|
+
symbolOnLeft?: boolean;
|
|
56
|
+
spaceBetween?: boolean;
|
|
57
|
+
decimalMark?: '.' | ',';
|
|
58
|
+
thousandsSeparator?: string | null;
|
|
59
|
+
precision?: number | null;
|
|
60
|
+
};
|
|
61
|
+
line?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface Tag {
|
|
64
|
+
name: string;
|
|
65
|
+
declared: boolean;
|
|
66
|
+
sourceUri?: string;
|
|
67
|
+
line?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface Directive {
|
|
70
|
+
type: 'account' | 'commodity' | 'payee' | 'tag' | 'include' | 'alias';
|
|
71
|
+
value: string;
|
|
72
|
+
comment?: string;
|
|
73
|
+
sourceUri?: string;
|
|
74
|
+
line?: number;
|
|
75
|
+
}
|
|
76
|
+
export interface ParsedDocument {
|
|
77
|
+
transactions: Transaction[];
|
|
78
|
+
accounts: Account[];
|
|
79
|
+
directives: Directive[];
|
|
80
|
+
commodities: Commodity[];
|
|
81
|
+
payees: Payee[];
|
|
82
|
+
tags: Tag[];
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|