我发现代码一步步 C-x C-e 执行没问题,但是eval-buffer就有问题
talk is cheap, show me the code
主要是这段宏展开不了
(defmacro lsp-bridge-interface (&rest interfaces)
"Generate LSP bindings from INTERFACES triplet.
Example usage with `dash`.
\(-let [(&ApplyWorkspaceEditResponse
:failure-reason?) (ht (\"failureReason\" \"...\"))]
failure-reason?)
\(fn (INTERFACE-NAME-1 REQUIRED-FIELDS-1 OPTIONAL-FIELDS-1) (INTERFACE-NAME-2 REQUIRED-FIELDS-2 OPTIONAL-FIELDS-2) ...)"
(with-case-table ascii-case-table
(->> interfaces
(-map (-lambda ((interface required optional))
(let ((params (nconc
(-map (lambda (param-name)
(cons
(intern (concat ":" (s-dashed-words (symbol-name param-name)) "?"))
param-name))
optional)
(-map (lambda (param-name)
(cons (intern (concat ":" (s-dashed-words (symbol-name param-name))))
param-name))
required))))
(cl-list*
`(defun ,(intern (format "dash-expand:&%s" interface)) (key source)
(unless (or (member key ',(-map #'cl-first params))
(s-starts-with? ":_" (symbol-name key)))
(error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
`(plist-get ,source
,(if (s-starts-with? ":_" (symbol-name key))
key
(cl-rest (assoc key ',params)))))
`(defun ,(intern (format "dash-expand:&%s?" interface)) (key source)
(unless (member key ',(-map #'cl-first params))
(error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
`(plist-get ,source
,(if (s-starts-with? ":_" (symbol-name key))
key
(cl-rest (assoc key ',params)))))
`(defun ,(intern (format "lsp-bridge-%s?" (s-dashed-words (symbol-name interface)))) (object)
(cond
((ht? object)
(-all? (let ((keys (ht-keys object)))
(lambda (prop)
(member prop keys)))
',(-map (lambda (field-name)
(substring (symbol-name field-name) 1))
required)))
((listp object) (-all? (lambda (prop)
(plist-member object prop))
',required))))
`(cl-defun ,(intern (format "lsp-bridge-make-%s" (s-dashed-words (symbol-name interface))))
(&rest plist &key ,@(-map (-lambda ((key))
(intern (substring (symbol-name key) 1))) params)
&allow-other-keys)
(ignore ,@(-map (-lambda ((key))
(intern (substring (symbol-name key) 1))) params))
,(format "Constructs %s from `plist.'
Allowed params: %s" interface (reverse (-map #'cl-first params)))
(-mapcat (-lambda ((key value))
(list (or (cl-rest (assoc key ',params)) key) value))
(-partition 2 plist)))
`(pcase-defmacro ,interface (&rest property-bindings)
`(and
(pred listp)
;; Check if all the types required by the
;; interface exist in the expr-val.
,@(-map
(lambda (key)
`(pred
(lambda (plist)
(plist-member plist ,key))))
',required)
;; Recursively generate the bindings.
,@(let ((current-list property-bindings)
(output-bindings nil))
;; Invariant: while current-list is
;; non-nil, the car of current-list is
;; always of the form :key, while the
;; cadr of current-list is either a)
;; nil, b) of the form :key-next or c)
;; a pcase pattern that can
;; recursively match an expression.
(while current-list
(-let* (((curr-binding-as-keyword next-entry . _) current-list)
(curr-binding-as-camelcased-symbol
(or (alist-get curr-binding-as-keyword ',params)
(error "Unknown key: %s. Available keys: %s"
(symbol-name curr-binding-as-keyword)
',(-map #'cl-first params))))
(bound-name (lsp-bridge-keyword->symbol curr-binding-as-keyword))
(next-entry-is-key-or-nil
(and (symbolp next-entry)
(or (null next-entry)
(s-starts-with? ":" (symbol-name next-entry))))))
(cond
;; If the next-entry is either a
;; plist-key or nil, then bind to
;; bound-name the value corresponding
;; to the camelcased symbol. Pop
;; current-list once.
(next-entry-is-key-or-nil
(push `(app (lambda (plist)
(plist-get plist ,curr-binding-as-camelcased-symbol))
,bound-name)
output-bindings)
(setf current-list (cdr current-list)))
;; Otherwise, next-entry is a pcase
;; pattern we recursively match to the
;; expression. This can in general
;; create additional bindings that we
;; persist in the top level of
;; bindings. We pop current-list
;; twice.
(t
(push `(app (lambda (plist)
(plist-get plist ,curr-binding-as-camelcased-symbol))
,next-entry)
output-bindings)
(setf current-list (cddr current-list))))))
output-bindings)))
(-mapcat (-lambda ((label . name))
(list
`(defun ,(intern (format "lsp-bridge:%s-%s"
(s-dashed-words (symbol-name interface))
(substring (symbol-name label) 1)))
(object)
(plist-get object ,name))
`(defun ,(intern (format "lsp-bridge:set-%s-%s"
(s-dashed-words (symbol-name interface))
(substring (symbol-name label) 1)))
(object value)
(plist-put object ,name value))))
params)))))
(apply #'append)
(cl-list* 'progn))))
C-h f 发现代码是这样的
(lsp-bridge-interface
(CallHierarchyCapabilities nil (:dynamicRegistration))
(CallHierarchyItem (:kind :name :range :selectionRange :uri) (:detail :tags))
(ClientCapabilities nil (:experimental :textDocument :workspace))
(ClientInfo (:name) (:version))
(CodeActionCapabilities nil (:codeActionLiteralSupport :dynamicRegistration :isPreferredSupport :dataSupport :resolveSupport))
(CodeActionContext (:diagnostics) (:only))
(CodeActionKindCapabilities (:valueSet) nil)
(CodeActionLiteralSupportCapabilities nil (:codeActionKind))
(CodeActionOptions nil (:codeActionKinds :resolveProvider))
(CodeLensCapabilities nil (:dynamicRegistration))
(CodeLensOptions (:resolveProvider) nil)
(Color (:red :green :blue :alpha) nil)
(ColorProviderCapabilities nil (:dynamicRegistration))
(ColorProviderOptions nil (:documentSelector :id))
(ColoringInformation (:range :styles) nil)
(Command (:title :command) (:arguments))
(CompletionCapabilities nil (:completionItem :completionItemKind :contextSupport :dynamicRegistration))
(CompletionContext (:triggerKind) (:triggerCharacter))
(CompletionItem (:label) (:additionalTextEdits :command :commitCharacters :data :deprecated :detail :documentation :filterText :insertText :insertTextFormat :insertTextMode :kind :preselect :sortText :tags :textEdit :score))
(CompletionItemCapabilities nil (:commitCharactersSupport :deprecatedSupport :documentationFormat :preselectSupport :snippetSupport :tagSupport :insertReplaceSupport :resolveSupport))
(CompletionItemKindCapabilities nil (:valueSet))
(CompletionItemTagSupportCapabilities (:valueSet) nil)
(CompletionOptions nil (:resolveProvider :triggerCharacters :allCommitCharacters))
(ConfigurationItem nil (:scopeUri :section))
(CreateFileOptions nil (:ignoreIfExists :overwrite))
(DeclarationCapabilities nil (:dynamicRegistration :linkSupport))
(DefinitionCapabilities nil (:dynamicRegistration :linkSupport))
(DeleteFileOptions nil (:ignoreIfNotExists :recursive))
(Diagnostic (:range :message) (:code :relatedInformation :severity :source :tags))
(DiagnosticRelatedInformation (:location :message) nil)
(DiagnosticsTagSupport (:valueSet) nil)
(DidChangeConfigurationCapabilities nil (:dynamicRegistration))
(DidChangeWatchedFilesCapabilities nil (:dynamicRegistration))
(DocumentFilter nil (:language :pattern :scheme))
(DocumentHighlightCapabilities nil (:dynamicRegistration))
(DocumentLinkCapabilities nil (:dynamicRegistration :tooltipSupport))
(DocumentLinkOptions nil (:resolveProvider))
(DocumentOnTypeFormattingOptions (:firstTriggerCharacter) (:moreTriggerCharacter))
(DocumentSymbol (:kind :name :range :selectionRange) (:children :deprecated :detail))
(DocumentSymbolCapabilities nil (:dynamicRegistration :hierarchicalDocumentSymbolSupport :symbolKind))
(ExecuteCommandCapabilities nil (:dynamicRegistration))
(ExecuteCommandOptions (:commands) nil)
(FileEvent (:type :uri) nil)
(FileSystemWatcher (:globPattern) (:kind))
(FoldingRangeCapabilities nil (:dynamicRegistration :lineFoldingOnly :rangeLimit))
(FoldingRangeProviderOptions nil (:documentSelector :id))
(FormattingCapabilities nil (:dynamicRegistration))
(FormattingOptions (:tabSize :insertSpaces) (:trimTrailingWhitespace :insertFinalNewline :trimFinalNewlines))
(HoverCapabilities nil (:contentFormat :dynamicRegistration))
(ImplementationCapabilities nil (:dynamicRegistration :linkSupport))
(Location (:range :uri) nil)
(MarkedString (:language :value) nil)
(MarkupContent (:kind :value) nil)
(MessageActionItem (:title) nil)
(OnTypeFormattingCapabilities nil (:dynamicRegistration))
(ParameterInformation (:label) (:documentation))
(ParameterInformationCapabilities nil (:labelOffsetSupport))
(Position (:character :line) nil)
(PublishDiagnosticsCapabilities nil (:relatedInformation :tagSupport :versionSupport))
(Range (:start :end) nil)
(RangeFormattingCapabilities nil (:dynamicRegistration))
(ReferenceContext (:includeDeclaration) nil)
(ReferencesCapabilities nil (:dynamicRegistration))
(Registration (:method :id) (:registerOptions))
(RenameCapabilities nil (:dynamicRegistration :prepareSupport))
(RenameFileOptions nil (:ignoreIfExists :overwrite))
(RenameOptions nil (:documentSelector :id :prepareProvider))
(ResourceChange nil (:current :newUri))
(ResourceOperation (:kind) nil)
(SaveOptions nil (:includeText))
(SelectionRange (:range) (:parent))
(SelectionRangeCapabilities nil (:dynamicRegistration))
(SemanticHighlightingCapabilities nil (:semanticHighlighting))
(SemanticHighlightingInformation (:line) (:tokens))
(SemanticHighlightingServerCapabilities nil (:scopes))
(ServerCapabilities nil (:callHierarchyProvider :codeActionProvider :codeLensProvider :colorProvider :completionProvider :declarationProvider :definitionProvider :documentFormattingProvider :documentHighlightProvider :documentLinkProvider :documentOnTypeFormattingProvider :documentRangeFormattingProvider :documentSymbolProvider :executeCommandProvider :experimental :foldingRangeProvider :hoverProvider :implementationProvider :referencesProvider :renameProvider :selectionRangeProvider :semanticHighlighting :signatureHelpProvider :textDocumentSync :typeDefinitionProvider :typeHierarchyProvider :workspace :workspaceSymbolProvider :semanticTokensProvider))
(ServerInfo (:name) (:version))
(SignatureHelp (:signatures) (:activeParameter :activeSignature))
(SignatureHelpCapabilities nil (:contextSupport :dynamicRegistration :signatureInformation))
(SignatureHelpContext (:triggerKind :isRetrigger) (:activeSignatureHelp :triggerCharacter))
(SignatureHelpOptions nil (:retriggerCharacters :triggerCharacters))
(SignatureInformation (:label) (:documentation :parameters))
(SignatureInformationCapabilities nil (:documentationFormat :parameterInformation))
(StaticRegistrationOptions nil (:documentSelector :id))
(SymbolCapabilities nil (:dynamicRegistration :symbolKind))
(SymbolKindCapabilities nil (:valueSet))
(SynchronizationCapabilities nil (:didSave :dynamicRegistration :willSave :willSaveWaitUntil))
(TextDocumentClientCapabilities nil (:callHierarchy :codeAction :codeLens :colorProvider :completion :declaration :definition :documentHighlight :documentLink :documentSymbol :foldingRange :formatting :hover :implementation :onTypeFormatting :publishDiagnostics :rangeFormatting :references :rename :selectionRange :semanticHighlightingCapabilities :signatureHelp :synchronization :typeDefinition :typeHierarchyCapabilities))
(TextDocumentContentChangeEvent (:text) (:range :rangeLength))
(TextDocumentEdit (:textDocument :edits) nil)
(TextDocumentIdentifier (:uri) nil)
(TextDocumentItem (:languageId :text :uri :version) nil)
(TextDocumentSyncOptions nil (:change :openClose :save :willSave :willSaveWaitUntil))
(TextEdit (:newText :range) nil)
(InsertReplaceEdit (:newText :insert :replace) nil)
(SnippetTextEdit (:newText :range) (:insertTextFormat))
(TypeDefinitionCapabilities nil (:dynamicRegistration :linkSupport))
(TypeHierarchyCapabilities nil (:dynamicRegistration))
(TypeHierarchyItem (:kind :name :range :selectionRange :uri) (:children :data :deprecated :detail :parents))
(Unregistration (:method :id) nil)
(VersionedTextDocumentIdentifier (:uri) (:version))
(WorkspaceClientCapabilities nil (:applyEdit :configuration :didChangeConfiguration :didChangeWatchedFiles :executeCommand :symbol :workspaceEdit :workspaceFolders))
(WorkspaceEdit nil (:changes :documentChanges :resourceChanges))
(WorkspaceEditCapabilities nil (:documentChanges :failureHandling :resourceChanges :resourceOperations))
(WorkspaceFolder (:uri :name) nil)
(WorkspaceFoldersChangeEvent (:removed :added) nil)
(WorkspaceFoldersOptions nil (:changeNotifications :supported))
(WorkspaceServerCapabilities nil (:workspaceFolders))
(ApplyWorkspaceEditParams (:edit) (:label))
(ApplyWorkspaceEditResponse (:applied) nil)
(CallHierarchyIncomingCall (:from :fromRanges) nil)
(CallHierarchyIncomingCallsParams (:item) nil)
(CallHierarchyOutgoingCall (:to :fromRanges) nil)
(CallHierarchyOutgoingCallsParams (:item) nil)
(CallHierarchyPrepareParams (:textDocument :position) (:uri))
(CodeAction (:title) (:command :diagnostics :edit :isPreferred :kind :data))
(CodeActionKind nil nil)
(CodeActionParams (:textDocument :context :range) nil)
(CodeLens (:range) (:command :data))
(CodeLensParams (:textDocument) nil)
(CodeLensRegistrationOptions nil (:documentSelector :resolveProvider))
(ColorInformation (:color :range) nil)
(ColorPresentation (:label) (:additionalTextEdits :textEdit))
(ColorPresentationParams (:color :textDocument :range) nil)
(ColoringParams (:uri :infos) nil)
(ColoringStyle nil nil)
(CompletionList (:items :isIncomplete) nil)
(CompletionParams (:textDocument :position) (:context :uri))
(CompletionRegistrationOptions nil (:documentSelector :resolveProvider :triggerCharacters))
(ConfigurationParams (:items) nil)
(CreateFile (:kind :uri) (:options))
(DeclarationParams (:textDocument :position) (:uri))
(DefinitionParams (:textDocument :position) (:uri))
(DeleteFile (:kind :uri) (:options))
(DidChangeConfigurationParams (:settings) nil)
(DidChangeTextDocumentParams (:contentChanges :textDocument) (:uri))
(DidChangeWatchedFilesParams (:changes) nil)
(DidChangeWatchedFilesRegistrationOptions (:watchers) nil)
(DidChangeWorkspaceFoldersParams (:event) nil)
(DidCloseTextDocumentParams (:textDocument) nil)
(DidOpenTextDocumentParams (:textDocument) (:text))
(DidSaveTextDocumentParams (:textDocument) (:text))
(DocumentColorParams (:textDocument) nil)
(DocumentFormattingParams (:textDocument :options) nil)
(DocumentHighlight (:range) (:kind))
(DocumentHighlightParams (:textDocument :position) (:uri))
(DocumentLink (:range) (:data :target :tooltip))
(DocumentLinkParams (:textDocument) nil)
(DocumentLinkRegistrationOptions nil (:documentSelector :resolveProvider))
(DocumentOnTypeFormattingParams (:ch :textDocument :options :position) nil)
(DocumentOnTypeFormattingRegistrationOptions (:firstTriggerCharacter) (:documentSelector :moreTriggerCharacter))
(DocumentRangeFormattingParams (:textDocument :options :range) nil)
(DocumentSymbolParams (:textDocument) nil)
(DynamicRegistrationCapabilities nil (:dynamicRegistration))
(ExecuteCommandParams (:command) (:arguments))
(ExecuteCommandRegistrationOptions (:commands) nil)
(FailureHandlingKind nil nil)
(FoldingRange (:endLine :startLine) (:endCharacter :kind :startCharacter))
(FoldingRangeKind nil nil)
(FoldingRangeRequestParams (:textDocument) nil)
(Hover (:contents) (:range))
(HoverParams (:textDocument :position) (:uri))
(ImplementationParams (:textDocument :position) (:uri))
(InitializeError (:retry) nil)
(InitializeErrorCode nil nil)
(InitializeParams nil (:capabilities :clientInfo :clientName :initializationOptions :processId :rootPath :rootUri :trace :workspaceFolders))
(InitializeResult (:capabilities) (:serverInfo))
(InitializedParams nil nil)
(LocationLink (:targetSelectionRange :targetUri :targetRange) (:originSelectionRange))
(MarkupKind nil nil)
(MessageParams (:type :message) nil)
(PrepareRenameParams (:textDocument :position) (:uri))
(PrepareRenameResult (:range :placeholder) nil)
(PublishDiagnosticsParams (:diagnostics :uri) (:version))
(ReferenceParams (:textDocument :context :position) (:uri))
(RegistrationParams (:registrations) nil)
(RenameFile (:kind :newUri :oldUri) (:options))
(RenameParams (:newName :textDocument :position) (:uri))
(ResolveTypeHierarchyItemParams (:item :resolve :direction) nil)
(ResourceOperationKind nil nil)
(SelectionRangeParams (:textDocument :positions) nil)
(SemanticHighlightingParams (:textDocument :lines) nil)
(ShowMessageRequestParams (:type :message) (:actions))
(SignatureHelpParams (:textDocument :position) (:context :uri))
(SignatureHelpRegistrationOptions nil (:documentSelector :triggerCharacters))
(SymbolInformation (:kind :name :location) (:containerName :deprecated))
(TextDocumentChangeRegistrationOptions (:syncKind) (:documentSelector))
(TextDocumentPositionParams (:textDocument :position) (:uri))
(TextDocumentRegistrationOptions nil (:documentSelector))
(TextDocumentSaveRegistrationOptions nil (:documentSelector :includeText))
(TypeDefinitionParams (:textDocument :position) (:uri))
(TypeHierarchyParams (:resolve :textDocument :position) (:direction :uri))
(UnregistrationParams (:unregisterations) nil)
(WatchKind nil nil)
(WillSaveTextDocumentParams (:reason :textDocument) nil)
(WorkspaceSymbolParams (:query) nil))
需要先require,之后再展开
??? require啥?
依据你提供的代码补充的完整的示例如下
(require 'cl-lib)
(require 'dash)
(require 'ht)
(require 's)
(require 'json)
(defmacro lsp-bridge-interface (&rest interfaces)
"Generate LSP bindings from INTERFACES triplet.
Example usage with `dash`.
\(-let [(&ApplyWorkspaceEditResponse
:failure-reason?) (ht (\"failureReason\" \"...\"))]
failure-reason?)
\(fn (INTERFACE-NAME-1 REQUIRED-FIELDS-1 OPTIONAL-FIELDS-1) (INTERFACE-NAME-2 REQUIRED-FIELDS-2 OPTIONAL-FIELDS-2) ...)"
(with-case-table ascii-case-table
(->> interfaces
(-map (-lambda ((interface required optional))
(let ((params (nconc
(-map (lambda (param-name)
(cons
(intern (concat ":" (s-dashed-words (symbol-name param-name)) "?"))
param-name))
optional)
(-map (lambda (param-name)
(cons (intern (concat ":" (s-dashed-words (symbol-name param-name))))
param-name))
required))))
(cl-list*
`(defun ,(intern (format "dash-expand:&%s" interface)) (key source)
(unless (or (member key ',(-map #'cl-first params))
(s-starts-with? ":_" (symbol-name key)))
(error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
`(plist-get ,source
,(if (s-starts-with? ":_" (symbol-name key))
key
(cl-rest (assoc key ',params)))))
`(defun ,(intern (format "dash-expand:&%s?" interface)) (key source)
(unless (member key ',(-map #'cl-first params))
(error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
`(plist-get ,source
,(if (s-starts-with? ":_" (symbol-name key))
key
(cl-rest (assoc key ',params)))))
`(defun ,(intern (format "lsp-bridge-%s?" (s-dashed-words (symbol-name interface)))) (object)
(cond
((ht? object)
(-all? (let ((keys (ht-keys object)))
(lambda (prop)
(member prop keys)))
',(-map (lambda (field-name)
(substring (symbol-name field-name) 1))
required)))
((listp object) (-all? (lambda (prop)
(plist-member object prop))
',required))))
`(cl-defun ,(intern (format "lsp-bridge-make-%s" (s-dashed-words (symbol-name interface))))
(&rest plist &key ,@(-map (-lambda ((key))
(intern (substring (symbol-name key) 1))) params)
&allow-other-keys)
(ignore ,@(-map (-lambda ((key))
(intern (substring (symbol-name key) 1))) params))
,(format "Constructs %s from `plist.'
Allowed params: %s" interface (reverse (-map #'cl-first params)))
(-mapcat (-lambda ((key value))
(list (or (cl-rest (assoc key ',params)) key) value))
(-partition 2 plist)))
`(pcase-defmacro ,interface (&rest property-bindings)
`(and
(pred listp)
;; Check if all the types required by the
;; interface exist in the expr-val.
,@(-map
(lambda (key)
`(pred
(lambda (plist)
(plist-member plist ,key))))
',required)
;; Recursively generate the bindings.
,@(let ((current-list property-bindings)
(output-bindings nil))
;; Invariant: while current-list is
;; non-nil, the car of current-list is
;; always of the form :key, while the
;; cadr of current-list is either a)
;; nil, b) of the form :key-next or c)
;; a pcase pattern that can
;; recursively match an expression.
(while current-list
(-let* (((curr-binding-as-keyword next-entry . _) current-list)
(curr-binding-as-camelcased-symbol
(or (alist-get curr-binding-as-keyword ',params)
(error "Unknown key: %s. Available keys: %s"
(symbol-name curr-binding-as-keyword)
',(-map #'cl-first params))))
(bound-name (lsp-bridge-keyword->symbol curr-binding-as-keyword))
(next-entry-is-key-or-nil
(and (symbolp next-entry)
(or (null next-entry)
(s-starts-with? ":" (symbol-name next-entry))))))
(cond
;; If the next-entry is either a
;; plist-key or nil, then bind to
;; bound-name the value corresponding
;; to the camelcased symbol. Pop
;; current-list once.
(next-entry-is-key-or-nil
(push `(app (lambda (plist)
(plist-get plist ,curr-binding-as-camelcased-symbol))
,bound-name)
output-bindings)
(setf current-list (cdr current-list)))
;; Otherwise, next-entry is a pcase
;; pattern we recursively match to the
;; expression. This can in general
;; create additional bindings that we
;; persist in the top level of
;; bindings. We pop current-list
;; twice.
(t
(push `(app (lambda (plist)
(plist-get plist ,curr-binding-as-camelcased-symbol))
,next-entry)
output-bindings)
(setf current-list (cddr current-list))))))
output-bindings)))
(-mapcat (-lambda ((label . name))
(list
`(defun ,(intern (format "lsp-bridge:%s-%s"
(s-dashed-words (symbol-name interface))
(substring (symbol-name label) 1)))
(object)
(plist-get object ,name))
`(defun ,(intern (format "lsp-bridge:set-%s-%s"
(s-dashed-words (symbol-name interface))
(substring (symbol-name label) 1)))
(object value)
(plist-put object ,name value))))
params)))))
(apply #'append)
(cl-list* 'progn))))
(macroexpand '(lsp-bridge-interface
(CallHierarchyCapabilities nil (:dynamicRegistration))
(CallHierarchyItem (:kind :name :range :selectionRange :uri) (:detail :tags))
(ClientCapabilities nil (:experimental :textDocument :workspace))
(ClientInfo (:name) (:version))
(CodeActionCapabilities nil (:codeActionLiteralSupport :dynamicRegistration :isPreferredSupport :dataSupport :resolveSupport))
(CodeActionContext (:diagnostics) (:only))
(CodeActionKindCapabilities (:valueSet) nil)
(CodeActionLiteralSupportCapabilities nil (:codeActionKind))
(CodeActionOptions nil (:codeActionKinds :resolveProvider))
(CodeLensCapabilities nil (:dynamicRegistration))
(CodeLensOptions (:resolveProvider) nil)
(Color (:red :green :blue :alpha) nil)
(ColorProviderCapabilities nil (:dynamicRegistration))
(ColorProviderOptions nil (:documentSelector :id))
(ColoringInformation (:range :styles) nil)
(Command (:title :command) (:arguments))
(CompletionCapabilities nil (:completionItem :completionItemKind :contextSupport :dynamicRegistration))
(CompletionContext (:triggerKind) (:triggerCharacter))
(CompletionItem (:label) (:additionalTextEdits :command :commitCharacters :data :deprecated :detail :documentation :filterText :insertText :insertTextFormat :insertTextMode :kind :preselect :sortText :tags :textEdit :score))
(CompletionItemCapabilities nil (:commitCharactersSupport :deprecatedSupport :documentationFormat :preselectSupport :snippetSupport :tagSupport :insertReplaceSupport :resolveSupport))
(CompletionItemKindCapabilities nil (:valueSet))
(CompletionItemTagSupportCapabilities (:valueSet) nil)
(CompletionOptions nil (:resolveProvider :triggerCharacters :allCommitCharacters))
(ConfigurationItem nil (:scopeUri :section))
(CreateFileOptions nil (:ignoreIfExists :overwrite))
(DeclarationCapabilities nil (:dynamicRegistration :linkSupport))
(DefinitionCapabilities nil (:dynamicRegistration :linkSupport))
(DeleteFileOptions nil (:ignoreIfNotExists :recursive))
(Diagnostic (:range :message) (:code :relatedInformation :severity :source :tags))
(DiagnosticRelatedInformation (:location :message) nil)
(DiagnosticsTagSupport (:valueSet) nil)
(DidChangeConfigurationCapabilities nil (:dynamicRegistration))
(DidChangeWatchedFilesCapabilities nil (:dynamicRegistration))
(DocumentFilter nil (:language :pattern :scheme))
(DocumentHighlightCapabilities nil (:dynamicRegistration))
(DocumentLinkCapabilities nil (:dynamicRegistration :tooltipSupport))
(DocumentLinkOptions nil (:resolveProvider))
(DocumentOnTypeFormattingOptions (:firstTriggerCharacter) (:moreTriggerCharacter))
(DocumentSymbol (:kind :name :range :selectionRange) (:children :deprecated :detail))
(DocumentSymbolCapabilities nil (:dynamicRegistration :hierarchicalDocumentSymbolSupport :symbolKind))
(ExecuteCommandCapabilities nil (:dynamicRegistration))
(ExecuteCommandOptions (:commands) nil)
(FileEvent (:type :uri) nil)
(FileSystemWatcher (:globPattern) (:kind))
(FoldingRangeCapabilities nil (:dynamicRegistration :lineFoldingOnly :rangeLimit))
(FoldingRangeProviderOptions nil (:documentSelector :id))
(FormattingCapabilities nil (:dynamicRegistration))
(FormattingOptions (:tabSize :insertSpaces) (:trimTrailingWhitespace :insertFinalNewline :trimFinalNewlines))
(HoverCapabilities nil (:contentFormat :dynamicRegistration))
(ImplementationCapabilities nil (:dynamicRegistration :linkSupport))
(Location (:range :uri) nil)
(MarkedString (:language :value) nil)
(MarkupContent (:kind :value) nil)
(MessageActionItem (:title) nil)
(OnTypeFormattingCapabilities nil (:dynamicRegistration))
(ParameterInformation (:label) (:documentation))
(ParameterInformationCapabilities nil (:labelOffsetSupport))
(Position (:character :line) nil)
(PublishDiagnosticsCapabilities nil (:relatedInformation :tagSupport :versionSupport))
(Range (:start :end) nil)
(RangeFormattingCapabilities nil (:dynamicRegistration))
(ReferenceContext (:includeDeclaration) nil)
(ReferencesCapabilities nil (:dynamicRegistration))
(Registration (:method :id) (:registerOptions))
(RenameCapabilities nil (:dynamicRegistration :prepareSupport))
(RenameFileOptions nil (:ignoreIfExists :overwrite))
(RenameOptions nil (:documentSelector :id :prepareProvider))
(ResourceChange nil (:current :newUri))
(ResourceOperation (:kind) nil)
(SaveOptions nil (:includeText))
(SelectionRange (:range) (:parent))
(SelectionRangeCapabilities nil (:dynamicRegistration))
(SemanticHighlightingCapabilities nil (:semanticHighlighting))
(SemanticHighlightingInformation (:line) (:tokens))
(SemanticHighlightingServerCapabilities nil (:scopes))
(ServerCapabilities nil (:callHierarchyProvider :codeActionProvider :codeLensProvider :colorProvider :completionProvider :declarationProvider :definitionProvider :documentFormattingProvider :documentHighlightProvider :documentLinkProvider :documentOnTypeFormattingProvider :documentRangeFormattingProvider :documentSymbolProvider :executeCommandProvider :experimental :foldingRangeProvider :hoverProvider :implementationProvider :referencesProvider :renameProvider :selectionRangeProvider :semanticHighlighting :signatureHelpProvider :textDocumentSync :typeDefinitionProvider :typeHierarchyProvider :workspace :workspaceSymbolProvider :semanticTokensProvider))
(ServerInfo (:name) (:version))
(SignatureHelp (:signatures) (:activeParameter :activeSignature))
(SignatureHelpCapabilities nil (:contextSupport :dynamicRegistration :signatureInformation))
(SignatureHelpContext (:triggerKind :isRetrigger) (:activeSignatureHelp :triggerCharacter))
(SignatureHelpOptions nil (:retriggerCharacters :triggerCharacters))
(SignatureInformation (:label) (:documentation :parameters))
(SignatureInformationCapabilities nil (:documentationFormat :parameterInformation))
(StaticRegistrationOptions nil (:documentSelector :id))
(SymbolCapabilities nil (:dynamicRegistration :symbolKind))
(SymbolKindCapabilities nil (:valueSet))
(SynchronizationCapabilities nil (:didSave :dynamicRegistration :willSave :willSaveWaitUntil))
(TextDocumentClientCapabilities nil (:callHierarchy :codeAction :codeLens :colorProvider :completion :declaration :definition :documentHighlight :documentLink :documentSymbol :foldingRange :formatting :hover :implementation :onTypeFormatting :publishDiagnostics :rangeFormatting :references :rename :selectionRange :semanticHighlightingCapabilities :signatureHelp :synchronization :typeDefinition :typeHierarchyCapabilities))
(TextDocumentContentChangeEvent (:text) (:range :rangeLength))
(TextDocumentEdit (:textDocument :edits) nil)
(TextDocumentIdentifier (:uri) nil)
(TextDocumentItem (:languageId :text :uri :version) nil)
(TextDocumentSyncOptions nil (:change :openClose :save :willSave :willSaveWaitUntil))
(TextEdit (:newText :range) nil)
(InsertReplaceEdit (:newText :insert :replace) nil)
(SnippetTextEdit (:newText :range) (:insertTextFormat))
(TypeDefinitionCapabilities nil (:dynamicRegistration :linkSupport))
(TypeHierarchyCapabilities nil (:dynamicRegistration))
(TypeHierarchyItem (:kind :name :range :selectionRange :uri) (:children :data :deprecated :detail :parents))
(Unregistration (:method :id) nil)
(VersionedTextDocumentIdentifier (:uri) (:version))
(WorkspaceClientCapabilities nil (:applyEdit :configuration :didChangeConfiguration :didChangeWatchedFiles :executeCommand :symbol :workspaceEdit :workspaceFolders))
(WorkspaceEdit nil (:changes :documentChanges :resourceChanges))
(WorkspaceEditCapabilities nil (:documentChanges :failureHandling :resourceChanges :resourceOperations))
(WorkspaceFolder (:uri :name) nil)
(WorkspaceFoldersChangeEvent (:removed :added) nil)
(WorkspaceFoldersOptions nil (:changeNotifications :supported))
(WorkspaceServerCapabilities nil (:workspaceFolders))
(ApplyWorkspaceEditParams (:edit) (:label))
(ApplyWorkspaceEditResponse (:applied) nil)
(CallHierarchyIncomingCall (:from :fromRanges) nil)
(CallHierarchyIncomingCallsParams (:item) nil)
(CallHierarchyOutgoingCall (:to :fromRanges) nil)
(CallHierarchyOutgoingCallsParams (:item) nil)
(CallHierarchyPrepareParams (:textDocument :position) (:uri))
(CodeAction (:title) (:command :diagnostics :edit :isPreferred :kind :data))
(CodeActionKind nil nil)
(CodeActionParams (:textDocument :context :range) nil)
(CodeLens (:range) (:command :data))
(CodeLensParams (:textDocument) nil)
(CodeLensRegistrationOptions nil (:documentSelector :resolveProvider))
(ColorInformation (:color :range) nil)
(ColorPresentation (:label) (:additionalTextEdits :textEdit))
(ColorPresentationParams (:color :textDocument :range) nil)
(ColoringParams (:uri :infos) nil)
(ColoringStyle nil nil)
(CompletionList (:items :isIncomplete) nil)
(CompletionParams (:textDocument :position) (:context :uri))
(CompletionRegistrationOptions nil (:documentSelector :resolveProvider :triggerCharacters))
(ConfigurationParams (:items) nil)
(CreateFile (:kind :uri) (:options))
(DeclarationParams (:textDocument :position) (:uri))
(DefinitionParams (:textDocument :position) (:uri))
(DeleteFile (:kind :uri) (:options))
(DidChangeConfigurationParams (:settings) nil)
(DidChangeTextDocumentParams (:contentChanges :textDocument) (:uri))
(DidChangeWatchedFilesParams (:changes) nil)
(DidChangeWatchedFilesRegistrationOptions (:watchers) nil)
(DidChangeWorkspaceFoldersParams (:event) nil)
(DidCloseTextDocumentParams (:textDocument) nil)
(DidOpenTextDocumentParams (:textDocument) (:text))
(DidSaveTextDocumentParams (:textDocument) (:text))
(DocumentColorParams (:textDocument) nil)
(DocumentFormattingParams (:textDocument :options) nil)
(DocumentHighlight (:range) (:kind))
(DocumentHighlightParams (:textDocument :position) (:uri))
(DocumentLink (:range) (:data :target :tooltip))
(DocumentLinkParams (:textDocument) nil)
(DocumentLinkRegistrationOptions nil (:documentSelector :resolveProvider))
(DocumentOnTypeFormattingParams (:ch :textDocument :options :position) nil)
(DocumentOnTypeFormattingRegistrationOptions (:firstTriggerCharacter) (:documentSelector :moreTriggerCharacter))
(DocumentRangeFormattingParams (:textDocument :options :range) nil)
(DocumentSymbolParams (:textDocument) nil)
(DynamicRegistrationCapabilities nil (:dynamicRegistration))
(ExecuteCommandParams (:command) (:arguments))
(ExecuteCommandRegistrationOptions (:commands) nil)
(FailureHandlingKind nil nil)
(FoldingRange (:endLine :startLine) (:endCharacter :kind :startCharacter))
(FoldingRangeKind nil nil)
(FoldingRangeRequestParams (:textDocument) nil)
(Hover (:contents) (:range))
(HoverParams (:textDocument :position) (:uri))
(ImplementationParams (:textDocument :position) (:uri))
(InitializeError (:retry) nil)
(InitializeErrorCode nil nil)
(InitializeParams nil (:capabilities :clientInfo :clientName :initializationOptions :processId :rootPath :rootUri :trace :workspaceFolders))
(InitializeResult (:capabilities) (:serverInfo))
(InitializedParams nil nil)
(LocationLink (:targetSelectionRange :targetUri :targetRange) (:originSelectionRange))
(MarkupKind nil nil)
(MessageParams (:type :message) nil)
(PrepareRenameParams (:textDocument :position) (:uri))
(PrepareRenameResult (:range :placeholder) nil)
(PublishDiagnosticsParams (:diagnostics :uri) (:version))
(ReferenceParams (:textDocument :context :position) (:uri))
(RegistrationParams (:registrations) nil)
(RenameFile (:kind :newUri :oldUri) (:options))
(RenameParams (:newName :textDocument :position) (:uri))
(ResolveTypeHierarchyItemParams (:item :resolve :direction) nil)
(ResourceOperationKind nil nil)
(SelectionRangeParams (:textDocument :positions) nil)
(SemanticHighlightingParams (:textDocument :lines) nil)
(ShowMessageRequestParams (:type :message) (:actions))
(SignatureHelpParams (:textDocument :position) (:context :uri))
(SignatureHelpRegistrationOptions nil (:documentSelector :triggerCharacters))
(SymbolInformation (:kind :name :location) (:containerName :deprecated))
(TextDocumentChangeRegistrationOptions (:syncKind) (:documentSelector))
(TextDocumentPositionParams (:textDocument :position) (:uri))
(TextDocumentRegistrationOptions nil (:documentSelector))
(TextDocumentSaveRegistrationOptions nil (:documentSelector :includeText))
(TypeDefinitionParams (:textDocument :position) (:uri))
(TypeHierarchyParams (:resolve :textDocument :position) (:direction :uri))
(UnregistrationParams (:unregisterations) nil)
(WatchKind nil nil)
(WillSaveTextDocumentParams (:reason :textDocument) nil)
(WorkspaceSymbolParams (:query) nil)))
宏被定义之后,应该就可以直接用了吧,还需要macoexpand吗
是可以直接用的,上面的示例是回复你说的展不开
严格来说有的宏定义是不可以直接用的,会涉及编译时求值,大多数情况下都可以直接用
阿这,不是应该使用的时候展开代码吗
lisp中的宏不仅是一种形式展开,也是一种计算,还会涉及求值,编译求值这些