Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new Roslyn server support for C# #4279

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Ruin0x11
Copy link

Adapted code from:

Closes #4278.

@jcs090218
Copy link
Member

It seems like there is a byte compile error, see https://github.com/emacs-lsp/lsp-mode/actions/runs/7344249257/job/19995837985?pr=4279#step:12:730. 🤔

@Ruin0x11
Copy link
Author

Thanks, it should be fixed now. Is it normal for the other tests to fail?

@Ruin0x11
Copy link
Author

I think the piping script may need improvements also. If too many messages overflow the 512 byte buffer they get interspersed and corrupted. It happens when I try to autocomplete something with a lot of candidates.

@jcs090218
Copy link
Member

Thanks, it should be fixed now. Is it normal for the other tests to fail?

It's normal! Don't have to worry about it!

@imakira
Copy link

imakira commented Jan 24, 2024

This is great, by my limited test, it is much faster than omnisharp.

One problem I encountered is when saving files it will throw this error

Debugger entered--Lisp error: (wrong-type-argument stringp #<hash-table equal 2/2 0x479659b>)
string-trim-right(#<hash-table equal 2/2 0x479659b> nil)
string-trim(#<hash-table equal 2/2 0x479659b>)
(let* ((trimmed-pattern (string-trim glob-pattern)) (top-level-unbraced-patterns (lsp-glob-unbrace-at-top-level trimmed-pattern))) (seq-map #'lsp-glob-convert-to-wrapped-regexp top-level-unbraced-patterns))
lsp-glob-to-regexps(#<hash-table equal 2/2 0x479659b>)
(let ((regexp (lsp-glob-to-regexps glob-pattern))) (lsp-put fs-watcher :_cachedRegexp regexp) regexp)
(or cached-regexp (let ((regexp (lsp-glob-to-regexps glob-pattern))) (lsp-put fs-watcher :_cachedRegexp regexp) regexp))
(let* ((regexes (or cached-regexp (let ((regexp (lsp-glob-to-regexps glob-pattern))) (lsp-put fs-watcher :_cachedRegexp regexp) regexp)))) (-any? #'(lambda (re) (or (string-match re changed-file) (string-match re rel-changed-file))) regexes))
(progn (let* ((regexes (or cached-regexp (let ((regexp ...)) (lsp-put fs-watcher :_cachedRegexp regexp) regexp)))) (-any? #'(lambda (re) (or (string-match re changed-file) (string-match re rel-changed-file))) regexes)))
(if (or (null kind?) (> (logand kind? watch-bit) 0)) (progn (let* ((regexes (or cached-regexp (let (...) (lsp-put fs-watcher :_cachedRegexp regexp) regexp)))) (-any? #'(lambda (re) (or (string-match re changed-file) (string-match re rel-changed-file))) regexes))))
(let* ((fs-watcher input0) (glob-pattern (gethash "globPattern" fs-watcher)) (kind? (gethash "kind" fs-watcher)) (cached-regexp (gethash "_cachedRegexp" fs-watcher))) (if (or (null kind?) (> (logand kind? watch-bit) 0)) (progn (let* ((regexes (or cached-regexp (let ... ... regexp)))) (-any? #'(lambda (re) (or ... ...)) regexes)))))
(closure ((watch-bit . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (input0) (let* ((fs-watcher input0) (glob-pattern (gethash "globPattern" fs-watcher)) (kind? (gethash "kind" fs-watcher)) (cached-regexp (gethash "_cachedRegexp" fs-watcher))) (if (or (null kind?) (> (logand kind? watch-bit) 0)) (progn (let* ((regexes ...)) (-any? #'... regexes))))))(#<hash-table equal 1/1 0x4796569>)
#f(compiled-function (elt) #<bytecode -0x9859887b04c71da>)(#<hash-table equal 1/1 0x4796569>)
mapc(#f(compiled-function (elt) #<bytecode -0x9859887b04c71da>) [#<hash-table equal 1/1 0x4796569> #<hash-table equal 1/1 0x2a6a829> #<hash-table equal 1/1 0x2a6a89b> #<hash-table equal 1/1 0x2a6a91b>])
seq-do(#f(compiled-function (elt) #<bytecode -0x9859887b04c71da>) [#<hash-table equal 1/1 0x4796569> #<hash-table equal 1/1 0x2a6a829> #<hash-table equal 1/1 0x2a6a89b> #<hash-table equal 1/1 0x2a6a91b>])
seq-find((closure ((watch-bit . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (input0) (let* ((fs-watcher input0) (glob-pattern (gethash "globPattern" fs-watcher)) (kind? (gethash "kind" fs-watcher)) (cached-regexp (gethash "_cachedRegexp" fs-watcher))) (if (or (null kind?) (> (logand kind? watch-bit) 0)) (progn (let* ((regexes ...)) (-any? #'... regexes)))))) [#<hash-table equal 1/1 0x4796569> #<hash-table equal 1/1 0x2a6a829> #<hash-table equal 1/1 0x2a6a89b> #<hash-table equal 1/1 0x2a6a91b>])
(and (equal (progn (or (progn (and (memq (type-of capability) cl-struct-lsp--registered-capability-tags) t)) (signal 'wrong-type-argument (list 'lsp--registered-capability capability))) (aref capability 2)) "workspace/didChangeWatchedFiles") (seq-find #'(lambda (input0) (let* ((fs-watcher input0) (glob-pattern (gethash "globPattern" fs-watcher)) (kind? (gethash "kind" fs-watcher)) (cached-regexp (gethash "cachedRegexp" fs-watcher))) (if (or (null kind?) (> ... 0)) (progn (let* ... ...))))) (lsp:did-change-watched-files-registration-options-watchers (progn (or (progn (and (memq ... cl-struct-lsp--registered-capability-tags) t)) (signal 'wrong-type-argument (list 'lsp--registered-capability capability))) (aref capability 3)))))
(closure ((watch-bit . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (capability) (and (equal (progn (or (progn (and ... t)) (signal 'wrong-type-argument (list ... capability))) (aref capability 2)) "workspace/didChangeWatchedFiles") (seq-find #'(lambda (input0) (let* (... ... ... ...) (if ... ...))) (lsp:did-change-watched-files-registration-options-watchers (progn (or (progn ...) (signal ... ...)) (aref capability 3))))))(#s(lsp--registered-capability :id "4f6876e4-b718-4ad7-99c8-5246fc751149" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x479652d>))
funcall((closure ((watch-bit . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (capability) (and (equal (progn (or (progn (and ... t)) (signal 'wrong-type-argument (list ... capability))) (aref capability 2)) "workspace/didChangeWatchedFiles") (seq-find #'(lambda (input0) (let* (... ... ... ...) (if ... ...))) (lsp:did-change-watched-files-registration-options-watchers (progn (or (progn ...) (signal ... ...)) (aref capability 3)))))) #s(lsp--registered-capability :id "4f6876e4-b718-4ad7-99c8-5246fc751149" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x479652d>))
(setq needle (funcall pred it))
(not (setq needle (funcall pred it)))
(let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle (funcall pred it))))
(progn (setq elt (car-safe list)) (let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle (funcall pred it)))))
(if list (progn (setq elt (car-safe list)) (let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle (funcall pred it))))))
(while (if list (progn (setq elt (car-safe list)) (let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle (funcall pred it)))))) (let ((it elt) (it-index i)) (ignore it it-index)) (progn (setq i (1+ i)) (setq list (cdr list))))
(let ((list list) (i 0) elt) (while (if list (progn (setq elt (car-safe list)) (let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle (funcall pred it)))))) (let ((it elt) (it-index i)) (ignore it it-index)) (progn (setq i (1+ i)) (setq list (cdr list)))))
(let (needle) (let ((list list) (i 0) elt) (while (if list (progn (setq elt (car-safe list)) (let ((it elt) (it-index i)) (ignore it it-index) (not (setq needle ...))))) (let ((it elt) (it-index i)) (ignore it it-index)) (progn (setq i (1+ i)) (setq list (cdr list))))) needle)
(and (let (needle) (let ((list list) (i 0) elt) (while (if list (progn (setq elt (car-safe list)) (let (... ...) (ignore it it-index) (not ...)))) (let ((it elt) (it-index i)) (ignore it it-index)) (progn (setq i (1+ i)) (setq list (cdr list))))) needle) t)
-any?((closure ((watch-bit . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (capability) (and (equal (progn (or (progn (and ... t)) (signal 'wrong-type-argument (list ... capability))) (aref capability 2)) "workspace/didChangeWatchedFiles") (seq-find #'(lambda (input0) (let* (... ... ... ...) (if ... ...))) (lsp:did-change-watched-files-registration-options-watchers (progn (or (progn ...) (signal ... ...)) (aref capability 3)))))) (#s(lsp--registered-capability :id "4f6876e4-b718-4ad7-99c8-5246fc751149" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x479652d>) #s(lsp--registered-capability :id "5beaccfd-25f3-4ef0-a1f4-12f51cfa3f44" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x79155f>) #s(lsp--registered-capability :id "26606318-5e0d-4848-9d99-39ffb5a6700c" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x791455>) #s(lsp--registered-capability :id "cbdfccb1-f0d8-494e-be2d-38221e686b13" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x14e921f>) #s(lsp--registered-capability :id "6186128e-581d-44cb-a92b-9cd7617e345e" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x125afab>) #s(lsp--registered-capability :id "df46cab7-6bf8-4f4e-a577-80b862fbdd87" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0xecff19>) #s(lsp--registered-capability :id "0fb8a143-917b-4cde-84ee-2ddaaab6372e" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x24ee501>) #s(lsp--registered-capability :id "b8608351-fb1a-4a49-982e-7beb2ff50a7b" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x3a855a1>) #s(lsp--registered-capability :id "a7396b83-4fa3-4cb7-9d28-34c11276318e" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x365ba73>) #s(lsp--registered-capability :id "0b5d90cb-6495-43e9-ab6d-2c1477e05366" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x174ec23>) #s(lsp--registered-capability :id "244bba62-23b8-48c8-8664-2d1e05ff24c3" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x3d07b09>) #s(lsp--registered-capability :id "94fcc8d8-6b77-4313-b103-e90fa5234df7" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x125a837>) #s(lsp--registered-capability :id "6d84077e-4391-4f2f-9353-cba39a1a51ca" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x125a729>) #s(lsp--registered-capability :id "d46c0abf-becc-4220-aa6f-04f9a9c9ed72" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x7a000b>) #s(lsp--registered-capability :id "6e9f838a-fc87-48f2-8889-eecb3a914609" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x12f77d1>) #s(lsp--registered-capability :id "540da52a-cb19-44a8-badd-b245718b1e77" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x1f8806b>) #s(lsp--registered-capability :id "9a0f1d70-df9f-4a26-a67d-2208ba417f1e" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x3ccf689>) #s(lsp--registered-capability :id "900f8696-7bef-432e-89b7-9f40153386b6" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x38b3715>) #s(lsp--registered-capability :id "a07b766c-404c-4de3-b931-31a50ae4eac0" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x125d4f7>) #s(lsp--registered-capability :id "8192c590-e989-4ec1-9baa-ebf6258716f8" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x2faa903>) #s(lsp--registered-capability :id "d91d3b25-2814-4d3c-be59-43af2e60ea68" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x12c0537>) #s(lsp--registered-capability :id "016e77be-f437-40f6-852b-4a4d7b216cdb" :method "workspace/didChangeWatchedFiles" :options #<hash-table equal 1/1 0x1bbc8f9>)))
(if (-any? #'(lambda (capability) (and (equal (progn (or ... ...) (aref capability 2)) "workspace/didChangeWatchedFiles") (seq-find #'(lambda ... ...) (lsp:did-change-watched-files-registration-options-watchers (progn ... ...))))) (progn (or (progn (and (memq (type-of workspace) cl-struct-lsp--workspace-tags) t)) (signal 'wrong-type-argument (list 'lsp--workspace workspace))) (aref workspace 3))) (progn (let ((lsp--cur-workspace workspace)) (lsp-notify "workspace/didChangeWatchedFiles" (list (cons 'changes (vector (list ... ...))))))))
(closure ((watch-bit . 2) (event-numeric-kind . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moments-Dev/Moments/Program.cs")) (workspace) (if (-any? #'(lambda (capability) (and (equal ... "workspace/didChangeWatchedFiles") (seq-find ... ...))) (progn (or (progn (and ... t)) (signal 'wrong-type-argument (list ... workspace))) (aref workspace 3))) (progn (let ((lsp--cur-workspace workspace)) (lsp-notify "workspace/didChangeWatchedFiles" (list (cons ... ...)))))))(#s(lsp--workspace :ewoc nil :server-capabilities #<hash-table equal 22/22 0x1ab7cb9> :registered-server-capabilities (... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) :root "/home/void/Projects/..." :client #s(lsp--client :language-id nil :add-on? nil :new-connection ... :ignore-regexps nil :ignore-messages nil :notification-handlers #<hash-table equal 2/65 0x374d96b> :request-handlers #<hash-table equal 0/65 0x374dc41> :response-handlers #<hash-table eql 1/65 0x3750e57> :prefix-function nil :uri-handlers #<hash-table equal 0/65 0x3751165> :action-handlers #<hash-table equal 0/65 0x3751393> :major-modes nil :activation-fn ... :priority 0 :server-id csharp-roslyn :multi-root nil :initialization-options nil :semantic-tokens-faces-overrides nil :custom-capabilities nil :library-folders-fn nil ...) :host-root nil :proc # :cmd-proc # :buffers (#) :semantic-tokens-faces nil :semantic-tokens-modifier-faces nil :extra-client-capabilities nil :status initialized :metadata #<hash-table equal 0/65 0x1aa05c9> :watches #<hash-table equal 0/65 0x1aa2279> :workspace-folders nil :last-id 0 :status-string nil :shutdown-action nil :diagnostics #<hash-table equal 0/65 0x1aa2299> ...))
mapc((closure ((watch-bit . 2) (event-numeric-kind . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moment...")) (workspace) (if (-any? ... ...) (progn ...))) (#s(lsp--workspace :ewoc nil :server-capabilities #<hash-table equal 22/22 0x1ab7cb9> :registered-server-capabilities (... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) :root "/home/void/Projects/Moment..." :client #s(lsp--client :language-id nil :add-on? nil :new-connection ... :ignore-regexps nil :ignore-messages nil :notification-handlers #<hash-table equal 2/65 0x374d96b> :request-handlers #<hash-table equal 0/65 0x374dc41> :response-handlers #<hash-table eql 1/65 0x3750e57> :prefix-function nil :uri-handlers #<hash-table equal 0/65 0x3751165> :action-handlers #<hash-table equal 0/65 0x3751393> :major-modes nil :activation-fn ... :priority 0 :server-id csharp-roslyn :multi-root nil :initialization-options nil :semantic-tokens-faces-overrides nil :custom-capabilities nil :library-folders-fn nil :before-file-open-fn nil :initialized-fn lsp-roslyn--on-initialized :remote? nil :completion-in-comments? nil :path->uri-fn lsp-roslyn--path-to-uri :uri->path-fn lsp-roslyn--uri-to-path ...) :host-root nil :proc # :cmd-proc # :buffers (#) :semantic-tokens-faces nil :semantic-tokens-modifier-faces nil :extra-client-capabilities nil :status initialized :metadata #<hash-table equal 0/65 0x1aa05c9> :watches #<hash-table equal 0/65 0x1aa2279> :workspace-folders nil :last-id 0 :status-string nil :shutdown-action nil :diagnostics #<hash-table equal 0/65 0x1aa2299> :work-done-tokens #<hash-table equal 0/65 0x1aa5b91>)))
seq-do((closure ((watch-bit . 2) (event-numeric-kind . 2) (rel-changed-file . "Program.cs") (changed-file . "/home/void/Projects/Moment...")) (workspace) (if (-any? ... ...) (progn ...))) (#s(lsp--workspace :ewoc nil :server-capabilities #<hash-table equal 22/22 0x1ab7cb9> :registered-server-capabilities (... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) :root "/home/void/Projects/Moment..." :client #s(lsp--client :language-id nil :add-on? nil :new-connection ... :ignore-regexps nil :ignore-messages nil :notification-handlers #<hash-table equal 2/65 0x374d96b> :request-handlers #<hash-table equal 0/65 0x374dc41> :response-handlers #<hash-table eql 1/65 0x3750e57> :prefix-function nil :uri-handlers #<hash-table equal 0/65 0x3751165> :action-handlers #<hash-table equal 0/65 0x3751393> :major-modes nil :activation-fn ... :priority 0 :server-id csharp-roslyn :multi-root nil :initialization-options nil :semantic-tokens-faces-overrides nil :custom-capabilities nil :library-folders-fn nil :before-file-open-fn nil :initialized-fn lsp-roslyn--on-initialized :remote? nil :completion-in-comments? nil :path->uri-fn lsp-roslyn--path-to-uri :uri->path-fn lsp-roslyn--uri-to-path ...) :host-root nil :proc # :cmd-proc # :buffers (#) :semantic-tokens-faces nil :semantic-tokens-modifier-faces nil :extra-client-capabilities nil :status initialized :metadata #<hash-table equal 0/65 0x1aa05c9> :watches #<hash-table equal 0/65 0x1aa2279> :workspace-folders nil :last-id 0 :status-string nil :shutdown-action nil :diagnostics #<hash-table equal 0/65 0x1aa2299> :work-done-tokens #<hash-table equal 0/65 0x1aa5b91>)))
(let* ((changed-file (car (cdr (cdr event)))) (rel-changed-file (f-relative changed-file root-folder)) (event-numeric-kind (alist-get (car (cdr event)) lsp--file-change-type)) (bit-position (1- event-numeric-kind)) (watch-bit (ash 1 bit-position))) (seq-do #'(lambda (workspace) (if (-any? #'(lambda ... ...) (progn (or ... ...) (aref workspace 3))) (progn (let (...) (lsp-notify "workspace/didChangeWatchedFiles" ...))))) (gethash root-folder (progn (or (progn (and (memq ... cl-struct-lsp-session-tags) t)) (signal 'wrong-type-argument (list 'lsp-session session))) (aref session 4)))))
lsp--file-process-event(#s(lsp-session :folders ("/home/void/Projects/Moments-Dev/Moments") :folders-blocklist nil :server-id->folders #<hash-table equal 3/65 0x30c609f> :folder->servers #<hash-table equal 1/65 0x30c60bf> :metadata #<hash-table equal 2/65 0x30c60df>) "/home/void/Projects/Moments-Dev/Moments" ((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs"))
apply(lsp--file-process-event (#s(lsp-session :folders ("/home/void/Projects/Moments-Dev/Moments") :folders-blocklist nil :server-id->folders #<hash-table equal 3/65 0x30c609f> :folder->servers #<hash-table equal 1/65 0x30c60bf> :metadata #<hash-table equal 2/65 0x30c60df>) "/home/void/Projects/Moments-Dev/Moments" ((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs")))
#f(compiled-function (&rest args2) #<bytecode 0x1f5be9a4ce611751>)(((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs"))
funcall(#f(compiled-function (&rest args2) #<bytecode 0x1f5be9a4ce611751>) ((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs"))
(cond ((and (file-directory-p file-name) (equal 'created event-type) (not (lsp--string-match-any ignored-directories file-name))) (lsp-watch-root-folder (file-truename file-name) callback ignored-files ignored-directories watch) (seq-do #'(lambda (f) (if (file-directory-p f) nil (funcall callback (list nil ... f)))) (directory-files-recursively file-name "." t))) ((and (memq event-type '(created deleted changed)) (not (file-directory-p file-name)) (not (lsp--string-match-any ignored-files file-name))) (funcall callback event)) ((and (memq event-type '(renamed)) (not (file-directory-p file-name)) (not (lsp--string-match-any ignored-files file-name))) (funcall callback (list (cl-first event) 'deleted (car (cdr (cdr event))))) (funcall callback (list (cl-first event) 'created (car (cdr (cdr (cdr event))))))))
(let ((file-name (car (cdr (cdr event)))) (event-type (car (cdr event)))) (cond ((and (file-directory-p file-name) (equal 'created event-type) (not (lsp--string-match-any ignored-directories file-name))) (lsp-watch-root-folder (file-truename file-name) callback ignored-files ignored-directories watch) (seq-do #'(lambda (f) (if (file-directory-p f) nil (funcall callback ...))) (directory-files-recursively file-name ".
" t))) ((and (memq event-type '(created deleted changed)) (not (file-directory-p file-name)) (not (lsp--string-match-any ignored-files file-name))) (funcall callback event)) ((and (memq event-type '(renamed)) (not (file-directory-p file-name)) (not (lsp--string-match-any ignored-files file-name))) (funcall callback (list (cl-first event) 'deleted (car (cdr (cdr event))))) (funcall callback (list (cl-first event) 'created (car (cdr (cdr ...))))))))
lsp--folder-watch-callback(((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs") #f(compiled-function (&rest args2) #<bytecode 0x1f5be9a4ce611751>) #s(lsp-watch :descriptors #<hash-table equal 12/65 0x1bbb069> :root-directory "/home/void/Projects/Moments-Dev/Moments") ("[/\\]flycheck
[^/\\\\]+\'" "[/\\]\.#[^/\\\\]+\'" "[/\\][^/\\\\]+\'") ("[/\\]\.git\'" "[/\\]\.github\'" "[/\\]\.gitlab\'" "[/\\]\.circleci\'" "[/\\]\.hg\'" "[/\\]\.bzr\'" "[/\\]_darcs\'" "[/\\]\.svn\'" "[/\\]FOSSIL\'" "[/\\]\.idea\'" "[/\\]\.ensime_cache\'" "[/\\]\.eunit\'" "[/\\]node_modules" "[/\\]\.yarn\'" "[/\\]\.fslckout\'" "[/\\]\.tox\'" "[/\\]\.nox\'" "[/\\]dist\'" "[/\\]dist-newstyle\'" "[/\\]\.stack-work\'" "[/\\]\.bloop\'" "[/\\]\.metals\'" "[/\\]target\'" "[/\\]\.ccls-cache\'" "[/\\]\.vscode\'" "[/\\]\.venv\'" "[/\\]\.mypy_cache\'" "[/\\]\.pytest_cache\'" "[/\\]\.build\'" "[/\\]pycache\'" "[/\\]\.deps\'" "[/\\]build-aux\'" "[/\\]autom4te.cache\'" "[/\\]\.reference\'" "[/\\]bazel-[^/\\\\]+\'" "[/\\]\.meta\'" "[/\\]Library\'" "[/\\]\.lsp\'" "[/\\]\.clj-kondo\'" "[/\\]\.shadow-cljs\'" "[/\\]\.babel_cache\'" "[/\\]\.cpcache\'" "[/\\]\checkouts\'" "[/\\]\.gradle\'" "[/\\]\.m2\'" "[/\\]bin/Debug\'" "[/\\]obj\'" "[/\\]_opam\'" "[/\\]_build\'" "[/\\]\.elixir_ls\'" ...))
(closure ((watch . #s(lsp-watch :descriptors #<hash-table equal 12/65 0x1bbb069> :root-directory "/home/void/Projects/Moments-Dev/Moments")) (ignored-directories "[/\\]\.git\'" "[/\\]\.github\'" "[/\\]\.gitlab\'" "[/\\]\.circleci\'" "[/\\]\.hg\'" "[/\\]\.bzr\'" "[/\\]_darcs\'" "[/\\]\.svn\'" "[/\\]FOSSIL\'" "[/\\]\.idea\'" "[/\\]\.ensime_cache\'" "[/\\]\.eunit\'" "[/\\]node_modules" "[/\\]\.yarn\'" "[/\\]\.fslckout\'" "[/\\]\.tox\'" "[/\\]\.nox\'" "[/\\]dist\'" "[/\\]dist-newstyle\'" "[/\\]\.stack-work\'" "[/\\]\.bloop\'" "[/\\]\.metals\'" "[/\\]target\'" "[/\\]\.ccls-cache\'" "[/\\]\.vscode\'" "[/\\]\.venv\'" "[/\\]\.mypy_cache\'" "[/\\]\.pytest_cache\'" "[/\\]\.build\'" "[/\\]pycache\'" "[/\\]\.deps\'" "[/\\]build-aux\'" "[/\\]autom4te.cache\'" "[/\\]\.reference\'" "[/\\]bazel-[^/\\\\]+\'" "[/\\]\.meta\'" "[/\\]Library\'" "[/\\]\.lsp\'" "[/\\]\.clj-kondo\'" "[/\\]\.shadow-cljs\'" "[/\\]\.babel_cache\'" "[/\\]\.cpcache\'" "[/\\]\checkouts\'" "[/\\]\.gradle\'" "[/\\]\.m2\'" "[/\\]bin/Debug\'" "[/\\]obj\'" "[/\\]_opam\'" "[/\\]build\'" ...) (ignored-files "[/\\]flycheck[^/\\\\]+\'" "[/\\]\.#[^/\\\\]+\'" "[/\\][^/\\\\]+
\'") (callback . #f(compiled-function (&rest args2) #<bytecode 0x1f5be9a4ce611751>))) (event) (lsp--folder-watch-callback event callback watch ignored-files ignored-directories))(((1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs"))
file-notify--call-handler(#s(file-notify--watch :directory "/home/void/Projects/Moments-Dev/Moments" :filename nil :callback (closure ((watch . #s(lsp-watch :descriptors #<hash-table equal 12/65 0x1bbb069> :root-directory "/home/void/Projects/Moments-Dev/Moments")) (ignored-directories "[/\\]\.git\'" "[/\\]\.github\'" "[/\\]\.gitlab\'" "[/\\]\.circleci\'" "[/\\]\.hg\'" "[/\\]\.bzr\'" "[/\\]_darcs\'" "[/\\]\.svn\'" "[/\\]FOSSIL\'" "[/\\]\.idea\'" "[/\\]\.ensime_cache\'" "[/\\]\.eunit\'" "[/\\]node_modules" "[/\\]\.yarn\'" "[/\\]\.fslckout\'" "[/\\]\.tox\'" "[/\\]\.nox\'" "[/\\]dist\'" "[/\\]dist-newstyle\'" "[/\\]\.stack-work\'" "[/\\]\.bloop\'" "[/\\]\.metals\'" "[/\\]target\'" "[/\\]\.ccls-cache\'" "[/\\]\.vscode\'" "[/\\]\.venv\'" "[/\\]\.mypy_cache\'" "[/\\]\.pytest_cache\'" "[/\\]\.build\'" "[/\\]pycache\'" "[/\\]\.deps\'" "[/\\]build-aux\'" "[/\\]autom4te.cache\'" "[/\\]\.reference\'" "[/\\]bazel-[^/\\\\]+\'" "[/\\]\.meta\'" "[/\\]Library\'" "[/\\]\.lsp\'" "[/\\]\.clj-kondo\'" "[/\\]\.shadow-cljs\'" "[/\\]\.babel_cache\'" "[/\\]\.cpcache\'" "[/\\]\checkouts\'" "[/\\]\.gradle\'" "[/\\]\.m2\'" "[/\\]bin/Debug\'" "[/\\]obj\'" "[/\\]_opam\'" "[/\\]build\'" ...) (ignored-files "[/\\]flycheck[^/\\\\]+\'" "[/\\]\.#[^/\\\\]+\'" "[/\\][^/\\\\]+~\'") (callback . #f(compiled-function (&rest args2) #<bytecode 0x1f5be9a4ce611751>))) (event) (lsp--folder-watch-callback event callback watch ignored-files ignored-directories))) (1 . 0) changed "/home/void/Projects/Moments-Dev/Moments/Program.cs" nil)
file-notify--handle-event((1 . 0) (changed) "Program.cs" 0)
file-notify--callback-inotify(((1 . 0) (modify) "Program.cs" 0))
file-notify-handle-event((file-notify ((1 . 0) (modify) "Program.cs" 0) file-notify--callback-inotify))
funcall-interactively(file-notify-handle-event (file-notify ((1 . 0) (modify) "Program.cs" 0) file-notify--callback-inotify))
command-execute(file-notify-handle-event nil [(file-notify ((1 . 0) (modify) "Program.cs" 0) file-notify--callback-inotify)] t)

By the way, I can't get the automatic download working, it says 401 Unauthorized, so I manually downloaded it from Download and Release Roslyn.

@imakira
Copy link

imakira commented Jan 24, 2024

It seems in LSP 3.17 it changed that GlobPattern could either be a string or an object with two attributes (baseUri and pattern)

@kirill-gerasimenko-da
Copy link

This is great, by my limited test, it is much faster than omnisharp

Does it support the same capabilities?

@imakira
Copy link

imakira commented Jan 30, 2024

This is great, by my limited test, it is much faster than omnisharp

Does it support the same capabilities?

Sorry I haven't used it much, but it is the one powering vscode-csharp So I assume it could be quite competent.

@Hi-Angel
Copy link
Contributor

CC: @razzmatazz (the C#/F# maintainer here)

@Ruin0x11 Idk what are the lsp-mode rules though, but usually commits that fix previous commits within a single pull-request/merge-request/patchset are frowned upon. If your older commit has a bug, fix it in that commit. In your case though I presume you might want to squash everything.

} catch [System.AggregateException] {
Write-Error $error[0].exception.innerexception
throw $error[0].exception.innerexception
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this file for? 🤔 Can you explain it? Thanks!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This server only supports connecting via named pipes and has no stdin option. However, Emacs does not natively support connecting via named pipes on Windows, so this script is meant as a shim to convert the named pipe I/O to stdin I/O.

clients/lsp-roslyn.el Outdated Show resolved Hide resolved
@jcs090218
Copy link
Member

Can you resolve conflicts and rebase this? Thanks!

@github-actions github-actions bot added documentation client One or more of lsp-mode language clients labels Apr 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
client One or more of lsp-mode language clients documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support Roslyn language server (.NET)
5 participants