简体   繁体   English

我如何将 LSP 连接到 Webview2 摩纳哥编辑器

[英]How do i connect LSP to Webview2 monaco editor

I have https://github.com/arnoson/monaco-lua-example right here, which is an example of connecting a language server to the monaco editor (mine is especially hosted by webview2.)我这里有https://github.com/arnoson/monaco-lua-example ,这是一个将语言服务器连接到 monaco 编辑器的示例(我的是专门由 webview2 托管的。)

https://github.com/NightrainsRbx/RobloxLsp Is the language server fork which has the features I need, If you use the example above, it shows “Upgrade Required” so not really to do much here as a beginner. https://github.com/NightrainsRbx/RobloxLsp是具有我需要的功能的语言服务器分支,如果您使用上面的示例,它会显示“需要升级”,所以作为初学者,在这里做的并不多。

I also know about monaco.languages.register and registerlanguageserver and similar stuff, but I'm not really sure how I would use it.我也知道 monaco.languages.register 和 registerlanguageserver 以及类似的东西,但我不确定我将如何使用它。

I tried this, this is not some good code you see and works pretty bad, when you do this and type something that creates an error on purpose in monaco editor, it doesn't respond.我试过了,这不是你看到的一些好代码,而且效果很差,当你这样做并在 monaco 编辑器中输入一些故意产生错误的东西时,它没有响应。

string lspPath = Path.Combine(Environment.CurrentDirectory, "lsp", "server");
string exePath = Path.Combine(lspPath, "lua-language-server.exe");

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = exePath;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.RedirectStandardOutput = true;

string lspPath2 = Path.Combine(Environment.CurrentDirectory, "lsp");
string exePath2 = Path.Combine(lspPath2, "lsp-ws-proxy.exe");

ProcessStartInfo startInfo2 = new ProcessStartInfo();
startInfo2.CreateNoWindow = false;
startInfo2.UseShellExecute = false;
startInfo2.FileName = exePath2;
startInfo2.WindowStyle = ProcessWindowStyle.Hidden;
startInfo2.RedirectStandardOutput = true;

Process process2 = Process.Start(startInfo2);

using (Process process = Process.Start(startInfo))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        Debug.WriteLine(result);
    }
}

webView.Source = new Uri(System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"Rosploco\rosploco.html"));

// Inject a script into the WebView2 to register the Lua language server
string script = "monaco.languages.register({ id: 'roblox-lua' }).then(function () {" +
               "    monaco.languages.setLanguageConfiguration('lua', {" +
               "        comments: {" +
               "            lineComment: '--'," +
               "            blockComment: ['--[[', ']]']" +
               "        }," +
               "        brackets: [[" +
               "            ['{','}']," +
               "            ['[',']']," +
               "            ['(',')']" +
               "        ]]," +
               "        autoClosingPairs: [" +
               "            { open: '{', close: '}' }," +
               "            { open: '[', close: ']' }," +
               "            { open: '(', close: ')' }," +
               "            { open: '\"', close: '\"' }," +
               "            { open: '\'', close: '\'' }" +
               "        ]," +
               "        surroundingPairs: [" +
               "            { open: '{', close: '}' }," +
               "            { open: '[', close: ']' }," +
               "            { open: '(', close: ')' }," +
               "            { open: '\"', close: '\"' }," +
               "            { open: '\'', close: '\'' }" +
               "        ]," +
               "        folding: {" +
               "            markers: {" +
               "                start: new RegExp('^\\s*//\\s*#region\\b')," +
               "                end: new RegExp('^\\s*//\\s*#endregion\\b')" +
               "            }" +
               "        }" +
               "    });" +
               "});";

webView.ExecuteScriptAsync(script);

Update I had to do npm run dev in monaco-lua-example and navigate to localhost:3000, now its working and it's properly connected but I still need the webview2 to connect to it. Update我必须执行npm run dev并导航到 localhost:3000,现在它可以正常工作并且已正确连接,但我仍然需要 webview2 才能连接到它。

Nevermind i had to do npm run dev in monaco-lua-example and navigate to localhost:3000.没关系,我必须在 monaco-lua-example 中执行npm run dev并导航到 localhost:3000。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM