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
|
module LanguageServer
module Protocol
module Interface
class WorkspaceEdit
def initialize(changes: nil, document_changes: nil, change_annotations: nil)
@attributes = {}
@attributes[:changes] = changes if changes
@attributes[:documentChanges] = document_changes if document_changes
@attributes[:changeAnnotations] = change_annotations if change_annotations
@attributes.freeze
end
#
# Holds changes to existing resources.
#
# @return [{}]
def changes
attributes.fetch(:changes)
end
#
# Depending on the client capability
# `workspace.workspaceEdit.resourceOperations` document changes are either
# an array of `TextDocumentEdit`s to express changes to n different text
# documents where each text document edit addresses a specific version of
# a text document. Or it can contain above `TextDocumentEdit`s mixed with
# create, rename and delete file / folder operations.
#
# Whether a client supports versioned document edits is expressed via
# `workspace.workspaceEdit.documentChanges` client capability.
#
# If a client neither supports `documentChanges` nor
# `workspace.workspaceEdit.resourceOperations` then only plain `TextEdit`s
# using the `changes` property are supported.
#
# @return [TextDocumentEdit[] | (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[]]
def document_changes
attributes.fetch(:documentChanges)
end
#
# A map of change annotations that can be referenced in
# `AnnotatedTextEdit`s or create, rename and delete file / folder
# operations.
#
# Whether clients honor this property depends on the client capability
# `workspace.changeAnnotationSupport`.
#
# @return [{ [id: string]: ChangeAnnotation; }]
def change_annotations
attributes.fetch(:changeAnnotations)
end
attr_reader :attributes
def to_hash
attributes
end
def to_json(*args)
to_hash.to_json(*args)
end
end
end
end
end
|