@@ -2,13 +2,14 @@ import { monaco, registerTextModelContentProvider } from '@codingame/monaco-edit
22import {
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'
66import { DidSaveTextDocumentNotification , DocumentSelector , Emitter , ServerCapabilities , TextDocumentSyncOptions } from 'vscode-languageserver-protocol'
77import * as vscode from 'vscode'
88import { updateFile , willShutdownNotificationType , WillShutdownParams } from './customRequests'
99import { Infrastructure } from './infrastructure'
1010import { LanguageClient , LanguageClientManager } from './languageClient'
1111import { getServices } from './services'
12+ import { CobolResolveSubroutineFeature } from './extensions/cobol'
1213
1314interface 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-
9561export function registerExtensionFeatures ( client : MonacoLanguageClient , language : string ) : void {
9662 if ( language === 'cobol' ) {
9763 client . registerFeature ( new CobolResolveSubroutineFeature ( client ) )
0 commit comments