Beispiel #1
0
 def send_workspace_folders_change(self, params):
     folder = params['folder']
     workspace_watcher = params['instance']
     folder_uri = path_as_uri(folder)
     added_folders = []
     removed_folders = []
     if params['kind'] == 'addition':
         if folder not in self.watched_folders:
             self.watched_folders[folder] = {
                 'uri': folder_uri,
                 'instance': workspace_watcher
             }
             added_folders.append({
                 'uri': folder_uri,
                 'name': folder
             })
     elif params['kind'] == 'deletion':
         if folder not in self.watched_folders:
             self.watched_folders.pop(folder)
             removed_folders.append({
                 'uri': folder_uri,
                 'name': folder
             })
     workspace_settings = self.server_capabilites['workspace']
     request_params = {
         'added': added_folders,
         'removed': removed_folders
     }
     if not workspace_settings['workspaceFolders']['supported']:
         request_params[ClientConstants.CANCEL] = True
     return request_params
Beispiel #2
0
    def document_did_close(self, params):
        codeeditor = params['codeeditor']
        logger.debug('[{0}] File: {1}'.format(
            LSPRequestTypes.DOCUMENT_DID_CLOSE, params['file']))
        filename = path_as_uri(params['file'])

        params = {
            'textDocument': {
                'uri': filename
            }
        }
        if filename not in self.watched_files:
            params[ClientConstants.CANCEL] = True
        else:
            editors = self.watched_files[filename]
            if len(editors) > 1:
                params[ClientConstants.CANCEL] = True
            idx = -1
            for i, editor in enumerate(editors):
                if id(codeeditor) == id(editor):
                    idx = i
                    break
            if idx > 0:
                editors.pop(idx)

            if len(editors) == 0:
                self.watched_files.pop(filename)

        return params
Beispiel #3
0
 def document_will_save_notification(self, params):
     params = {
         'textDocument': {
             'uri': path_as_uri(params['file'])
         },
         'reason': params['reason']
     }
     return params
Beispiel #4
0
 def document_changed(self, params):
     params = {
         'textDocument': {
             'uri': path_as_uri(params['file']),
             'version': params['version']
         },
         'contentChanges': [{
             'text': params['text']
         }]
     }
     return params
Beispiel #5
0
 def send_watched_files_change(self, params):
     changes = []
     entries = params.get('params', [])
     for entry in entries:
         changes.append({
             'uri': path_as_uri(entry['file']),
             'type': entry['kind']
         })
     params = {
         'changes': changes
     }
     return params
Beispiel #6
0
    def document_completion_request(self, params):
        params = {
            'textDocument': {
                'uri': path_as_uri(params['file'])
            },
            'position': {
                'line': params['line'],
                'character': params['column']
            }
        }

        return params
Beispiel #7
0
    def document_open(self, editor_params):
        uri = path_as_uri(editor_params['file'])
        if uri not in self.watched_files:
            self.register_file(
                editor_params['file'], editor_params['codeeditor'])
        params = {
            'textDocument': {
                'uri': uri,
                'languageId': editor_params['language'],
                'version': editor_params['version'],
                'text': editor_params['text']
            }
        }

        return params
Beispiel #8
0
 def document_did_save_notification(self, params):
     """
     Handle the textDocument/didSave message received from an LSP server.
     """
     text = None
     if 'text' in params:
         text = params['text']
     params = {
         'textDocument': {
             'uri': path_as_uri(params['file'])
         }
     }
     if text is not None:
         params['text'] = text
     return params
Beispiel #9
0
 def register_file(self, filename, codeeditor):
     filename = path_as_uri(filename)
     if filename not in self.watched_files:
         self.watched_files[filename] = []
     self.watched_files[filename].append(codeeditor)