Skip to content

Commit 142b9e7

Browse files
committed
refactor: Move extension in dedicated file
1 parent dd52726 commit 142b9e7

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

src/extensions.ts

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ import { monaco, registerTextModelContentProvider } from '@codingame/monaco-edit
22
import {
33
Disposable, MonacoLanguageClient, DisposableCollection
44
} from 'monaco-languageclient'
5-
import { StaticFeature, FeatureState, ProtocolRequestType } from 'vscode-languageclient/lib/common/api'
5+
import { StaticFeature, FeatureState } from 'vscode-languageclient/lib/common/api'
66
import { DidSaveTextDocumentNotification, DocumentSelector, Emitter, ServerCapabilities, TextDocumentSyncOptions } from 'vscode-languageserver-protocol'
77
import * as vscode from 'vscode'
88
import { updateFile, willShutdownNotificationType, WillShutdownParams } from './customRequests'
99
import { Infrastructure } from './infrastructure'
1010
import { LanguageClient, LanguageClientManager } from './languageClient'
1111
import { getServices } from './services'
12+
import { CobolResolveSubroutineFeature } from './extensions/cobol'
1213

1314
interface ResolvedTextDocumentSyncCapabilities {
1415
resolvedTextDocumentSync?: TextDocumentSyncOptions
@@ -57,41 +58,6 @@ export class InitializeTextDocumentFeature implements StaticFeature {
5758
}
5859
}
5960

60-
export const ResolveCobolSubroutineRequestType = new ProtocolRequestType<string, string, never, void, void>('cobol/resolveSubroutine')
61-
class CobolResolveSubroutineFeature implements StaticFeature {
62-
private onRequestDisposable: Disposable | undefined
63-
constructor (private languageClient: MonacoLanguageClient) {
64-
}
65-
66-
fillClientCapabilities (): void {}
67-
68-
initialize (capabilities: ServerCapabilities, documentSelector: DocumentSelector): void {
69-
this.onRequestDisposable = this.languageClient.onRequest(ResolveCobolSubroutineRequestType, (routineName: string): string => {
70-
const constantRoutinePaths: Partial<Record<string, string>> = {
71-
'assert-equals': `file:${vscode.workspace.rootPath ?? '/tmp/project'}/deps/assert-equals.cbl`
72-
}
73-
const contantRoutinePath = constantRoutinePaths[routineName.toLowerCase()]
74-
if (contantRoutinePath != null) {
75-
return contantRoutinePath
76-
}
77-
return vscode.workspace.textDocuments
78-
.filter(textDocument => vscode.languages.match(documentSelector, textDocument))
79-
.filter(document => document.getText().match(new RegExp(`PROGRAM-ID\\.\\W+${routineName}\\.`, 'gi')))
80-
.sort((a, b) => a.uri.toString().localeCompare(b.uri.toString()))[0]?.uri.toString()
81-
})
82-
}
83-
84-
getState (): FeatureState {
85-
return {
86-
kind: 'static'
87-
}
88-
}
89-
90-
dispose (): void {
91-
this.onRequestDisposable?.dispose()
92-
}
93-
}
94-
9561
export function registerExtensionFeatures (client: MonacoLanguageClient, language: string): void {
9662
if (language === 'cobol') {
9763
client.registerFeature(new CobolResolveSubroutineFeature(client))

src/extensions/cobol.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import {
2+
Disposable, MonacoLanguageClient
3+
} from 'monaco-languageclient'
4+
import { StaticFeature, FeatureState, ProtocolRequestType } from 'vscode-languageclient/lib/common/api'
5+
import { DocumentSelector, ServerCapabilities } from 'vscode-languageserver-protocol'
6+
import * as vscode from 'vscode'
7+
8+
export const ResolveCobolSubroutineRequestType = new ProtocolRequestType<string, string, never, void, void>('cobol/resolveSubroutine')
9+
export class CobolResolveSubroutineFeature implements StaticFeature {
10+
private onRequestDisposable: Disposable | undefined
11+
constructor (private languageClient: MonacoLanguageClient) {
12+
}
13+
14+
fillClientCapabilities (): void {}
15+
16+
initialize (capabilities: ServerCapabilities, documentSelector: DocumentSelector): void {
17+
this.onRequestDisposable = this.languageClient.onRequest(ResolveCobolSubroutineRequestType, (routineName: string): string => {
18+
const constantRoutinePaths: Partial<Record<string, string>> = {
19+
'assert-equals': `file:${vscode.workspace.rootPath ?? '/tmp/project'}/deps/assert-equals.cbl`
20+
}
21+
const contantRoutinePath = constantRoutinePaths[routineName.toLowerCase()]
22+
if (contantRoutinePath != null) {
23+
return contantRoutinePath
24+
}
25+
return vscode.workspace.textDocuments
26+
.filter(textDocument => vscode.languages.match(documentSelector, textDocument))
27+
.filter(document => document.getText().match(new RegExp(`PROGRAM-ID\\.\\W+${routineName}\\.`, 'gi')))
28+
.sort((a, b) => a.uri.toString().localeCompare(b.uri.toString()))[0]?.uri.toString()
29+
})
30+
}
31+
32+
getState (): FeatureState {
33+
return {
34+
kind: 'static'
35+
}
36+
}
37+
38+
dispose (): void {
39+
this.onRequestDisposable?.dispose()
40+
}
41+
}

0 commit comments

Comments
 (0)