У меня есть https://github.com/arnoson/monaco-lua-example прямо здесь, который является примером подключения языкового сервера к редактору monaco (в частности, мой размещен на webview2.)
https://github.com/NightrainsRbx/RobloxLsp Это форк языкового сервера, который имеет нужные мне функции. Если вы используете приведенный выше пример, он показывает «Требуется обновление», поэтому новичку здесь особо нечего делать.
Я также знаю о monaco.languages.register и registerlanguageserver и подобных вещах, но я не совсем уверен, как бы я их использовал.
Я пробовал это, это не какой-то хороший код, который вы видите, и он работает довольно плохо, когда вы делаете это и вводите что-то, что намеренно создает ошибку в редакторе 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
Мне пришлось сделать npm run dev
в monaco-lua-example и перейти на localhost: 3000, теперь он работает и правильно подключен, но мне все еще нужен webview2 для подключения к нему.
Неважно, мне пришлось сделать npm run dev
в monaco-lua-example и перейти на localhost: 3000. Большое спасибо!