Language Server Protocol & Debug Adapter Protocol to the Rescue of Web Development in Eclipse IDE
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Istria, Mickael
The state of Web (HTML, CSS, JS...) development in Eclipse IDE used to be bad. Indeed, some internal parsers had to be maintained to follow the frequent and major changes in those standards; the developer community behind them couldn't catch up, leading tools to a pretty bad and outdated state. Fortunately, the rise of technologies like TextMate grammars, Language Servers and Debug Adapters as reusable components have allowed Eclipse ecosystem to catch up with the best tools for web development. By integrating pieces of VSCode and others and with a relatively small investment, Eclipse Wild Web Developer provides a quite comfortable and efficient tool set for a wide variety of web-based projects. In this presentation, we'll demo Wild Web Developer in practicie, explaining as we demo how the LSP/DAP world is leveraged to enable those productive workflows.
 I'm Michael Isriyay. I work for Red Hat in Alex team on Eclipse ID, a platform to language server support, including build stuff and so on. And I'm going to tell you to show you and by the way explain you how we made web developer, what components we're reusing and what value it provides in Eclipse ID. So this is the web developer website where there is a description of everything. But before we get into details of web developer, let's think a few years back of how Eclipse was for web development three, four years ago. So there was the legacy JavaScript development tools which were totally outdated and mostly of bad quality. The HTML and CSS were not supporting the latest release. It was really bad and I think we can Eclipse lost some users over the years for various reasons and I think this reason can count for one million of users because the web tools were bad. But Eclipse is still a very relevant ID for many ecosystems because it's free, open source, polyglot, versatile, multi-platform, multi-projects, scalable, extensible, with built-in Git support, good comparison tool, local history, good search feature, a lot of addition commands and a huge and serious ecosystem. So for all this reason, we could not just let Eclipse be bad at web development which is now 60% of the market of development. And we said, okay, we need something better. It was the rise of language server. We'll use language servers to do so and that's how Web Developer emerged and provided a lot of features for web development that I'm going to demonstrate and go into detail. So let's get started. This is a good old Eclipse ID with old-fashioned lighting that everyone can read in the room. And we start by opening a CSS file. So I open the CSS file. Okay. This is a CSS file. It's not the old CSS file. It's only Web Developer. The syntax of lighting is coming from text mate. And you'll see that it has some addition features like documentation, color preview. Here there is the outline. If I make a mistake here on purpose, it will show an error. The error is shown in the usual views, the outline navigation. And the color preview. Yeah, color preview has a color picture. That's one of the things I like to demonstrate because it's just nice. It's not very important, but it's nice. And so we have all that for CSS. And this is not something we implemented. We just picked the VS Code CSS language server. There are people like Microsoft who did a good job regarding CSS. We just take their job, take their work and reuse it just like they're reusing the Java compiler of Eclipse ID. So this is for CSS. Another popular format is JSON. This is a JSON file. So if I put crappy JSON like this, it will fail because it's not conformed to the JSON grammar. Okay. Same thing. Error reporting, outline, and so on. And since JSON has schema in a strange way, but it has schema support. Here I describe the schema. So we have the documentation. We have content assist. How can I have content assist like this? So if I, what, maybe a Boolean here, module type, or I can do that. True. And it should work because it's wrong typing. I can format. So we have, it break the highlighting, but it's not a big deal. So we have a lot of features coming also for JSON. And this is just like CSS, the VS code, JSON language server that provides all that smartness. Integrating the JSON language server is exactly the same thing as integrating the CSS language server instead that we start a different script to do the magic. But there is no difference in the consumer code. So we have the schema completion. And if I open a popular fine name like TS config, everyone knows the TS config, the schema is built in. So you don't have to declare the schema, the ID declares the language server already knows some schemas that are popular. So you don't have to add schema on popular file like JSON or ESLint, like TS config or ESLint. Okay. That's CSS and JSON. I also have the ML, but I need to save time. That's the non, the official reason. The non official is that I have a bug with the ML in my demo. But we have XML. So the ML support when it's working and when I demo it, it's actually a red dot based language server done by some colleagues that we are using. Just like we use the CSS component from VS code, we are using the ML component from red dot from NPMJS and just everything we do. More importantly, the good old XML. We have a language server for XML. Alex mentioned it. It's currently on GitHub on some repository, but it's going to be at the eclipse lemmings project next week. And then it will be officially a Vendon neutral project. And what it does is that you get typical grammar XML grammar checks. So it's plain XML meta grammar checks. So this is invalid XML. It's reports invalid XML. And it has schema support for documentation or completion or everything. So you get a full feature XML grammar language server. And soon we'll have the extension for Maven, for example. So we'll add into this madness some things that can give the value of distribution ID in your context and so on. That's really near future. So we have formatting outline. Okay. That's for XML. Now let's get to the fun year languages. My favorite, I would say for this demo is the HTML one. So we have an HTML file which I open with a web browser and I reopen it with the editor. Okay. I put the web browser here because it makes them nice. No. Thanks. I'll enable refresh. So we have the web browser, the code editor with the outline and so on. I can break HTML with some bad stuff. Well, I hope to make bad stuff in HTML. Oh, yeah. I wanted to show completion. So we have completion for HTML elements as usual with documentation. This is coming from the HTML language server from VS code. We get completion. We get automatically closing tabs. So if I put a and open a tag next to slash a, we get control click on Ashraf and things like that so we can navigate to the resources. And also, yes, that's about all for the basics. And if I change the text, the cool thing I wanted to show is that with this navigator, okay, I did something wrong in the style. I broke my CSS. So with this embedding navigator and auto refresh, we get a very fast feedback loop when editing XML. So we have a fast edition thanks to long whichever and we have a very fast feedback loop with the auto refresh in the web, in the internal navigator. We have support for inline CSS. So here I have a bit of CSS in my HTML file. We get the same CSS support that we have on plain CSS file because it's actually using the same language server and those are good. So the VS code HTML language server will invoke the VS code CSS language server to get the CSS assistance that you're seeing here. It's the same one as VS code because it's the same engine. Always keep that in mind that the same engine is the same result. And so with this fun thing, I can just change the color with my super color picture and save and we get the color of the scene. We have also embedded JavaScript support. So if I'm here, there is a button on click which say hello. If I control click on it, it will find the say hello declaration in the HTML file. That's a feature provided by the language server. And in this JavaScript file, we get some assistance. So here if I run the variable I, it says it's a number. If I change it to be a string and over again, it becomes a string. So the ID reacts properly to JavaScript change. We get a completion. We get content assist and all that. So, oh yeah, one I can show is if I run a variable and select it, I can do find references, which is a typical Eclipse operation. Find references is usual. And if I hit enter, it didn't find the references. What did I do wrong? Okay, I show it with the plain JS file, but it's strange. Very strange. Sorry. I am too curious to search. Okay. It didn't work. But it works in real life. That's totally intended. So you've seen there is support for JavaScript, but not all JavaScript, not all web projects are frontend. You can have JavaScript services. So there is the hello.js file. And we have support for plain JavaScript. Similarly to everything I show you, so I won't go into detail. Control click. Assistance maybe here. I can try find references. I'm taking risk as you can see. Whoa, whoa, whoa, whoa, whoa, whoa, whoa. Okay, something went mad. Sorry about that. Okay. I'm back. You can enjoy the very fast startup that Lars mentioned earlier today. Fuck. I'm meeting the wrong shortcut. That's something I opened up about it. Sorry. Okay. Control three is better. Find references. Okay. Find references doesn't work, but there is a rename. Okay. And you send the variable to new name and the variable send. So we have the find references that you saw working very well. And the rename as well. So that's all the typical feature you will need for JavaScript. And the same language server that we are using, that is actually the TI JavaScript, TypeScript Long Waste Server. Eclipse TI is one ID developed in the Eclipse ecosystem by some folks, which is more targeted to be integrated, embeddable in a web browser. As part of this ID, they have developed a long waste server for JavaScript and TypeScript that we are using here. And here it's TypeScript. So we get the same thing for TypeScript. Yeah, rename. And so on. So you got a regular flow. Yeah, there is format completion. That's all. The cool thing with the TypeScript Long Waste Server is that it's used TypeScript TS server under the hood. So if you open some project that has ESLint enabled, they will support ESLint. So they reuse the configuration of your project directly. So here you have ESLint command because the tab is not necessary here. So that's one cool thing of the TypeScript Long Waste Server is that it's extensible just like TypeScript itself is extensible. And another one I can show you is the Angular one. So the Angular Long Waste Server is done by the Google Angular team. So we are picking the Long Waste Server. And we have a component, the JS, we can click on the HTML and we see some completion. So there is field and title and I can control click to get back to the TypeScript file. If I add a FOSDEM, a girl, lol like this and get back to my HTML template. FOSDEM is there and it says the property. So yeah, again, very good development flow. If I put a property that doesn't exist, I get a validation marker. We tend to forget that the markers are more important than the completion in real life, but you always get that. So that's very cool. We have got a very strong tool suite for development in Eclipse ID for low cost because we just picked the pieces from other projects. But developing is one activity of developer. I mean coding, editing. It's one activity and I would even argue it's not the one that takes the most time and the most smartness. The other one is debugging. Debugging is a very important activity. Actually, when you were used to your debugger, you constantly have a debugger on and you're editing the code you're debugging at least in Eclipse ID. That's how since we get the constant refresh, I almost always have the target application starting and edit it and get the whole tree load of the class and so on. So the debugger is really my favorite tool and I guess I'm not even one. So if I get back to this load.js file, we have support for the debugger thanks to the debug adapter protocol, which is a kind of friend of the language of a protocol. It's also used by VS Code. It's also debugger agnostic language agnostic, everything agnostic. So we could embed it just like the language of a protocol. And for the plain.js file, we have the node debugger, which is the debug adapter coming from VS code, the same one. And we can debug in a file just like we do usually in Java. So we have the breakpoint, the code stack on the left, navigable code stack, step by step navigation, variable view, and additions, and so on. So and the play, play, play, next. And the variable didn't change because I, let's try again. I probably mistyped something. So the value did change at runtime as expected. So this is a simple debugger, nothing fancy, it just works, does the job for not for a cheap price because it's Microsoft team who did that. And last but not least, the HTML file. This HTML file is dynamic, there is JavaScript and so on. So we can do the same thing, except that instead of debugging directly with node, we can debug with one of the browser which has an embeddable debugger. So I'll use Chrome for the demo. Do I have the shortcuts here? Chrome debug? No. Debug has Chrome debug. And Chrome is started, it says okay, it found the first breakpoint. Same thing, it's actually the same, if you look in the details of the language, it's the same debugger for node and for Chrome because when you debug node in VS code, it actually starts the V8 from inside Chromium to do the stuff. So it's the same thing, you get the same features, that's normal. And we can change the value, we can make it a string, a student and JavaScript doesn't really mind. And we get that. And here I have my web page, if I click on say hello, we see that even the inline, inline.js is there, so I can do the same thing. I is a string, let's say it's hey, for them. Okay. F6, we can inspect the document also by the way. So where is the document? That's the beauty with JavaScript, go find something in all these contexts. Okay, you see it here. Maybe I can overrun it and get details. Yeah, too bad the size is not perfect, but anyway, who needs that? So there is a small glitch and you see the message has changed, hello here for them and just like in the Chrome debugger, the button has changed as well. So I'm done with my demos and I'd love a few words to repeat what Alex said because you're in a brainwashing session about LSP and debug adapter, so you have to get the same thing over and over again. So the usage of language of a protocol on debug adapter protocol has allowed us as a small team at Red Hat, leveraging LSP4j, LSP4e and so on, which are major components, but once we have all that, it took us less than a year to get from scratch to this if you couldn't have full time employees. It's even a matter of months. It's a project we've been two or three working on one day a week or something like that for two years. I think so, yeah. So the return of investment of using language server in Eclipse ID is for us as developers. It's extremely high because it didn't cost a thing, almost. It's really cheap and the value for users is very high because the language server are of high quality and for that we can thank Microsoft for shipping those language servers and Microsoft and Red Hat and everyone who do language server. And one cool thing is that while doing this work, we have identified bugs in language server that we've reported. The HTML support in VS Code, for example, is now slightly better because of a bug I reported six months ago that got fixed. And when VS Code makes a new release with a new CSS support, an incredible new tag, we get it for free. So we've got this factorization not of, it's not even a technological factorization. We are really talking of a domain community factorization and the mindset has changed. The collaboration between ideas is getting much better, as Alex said. And that's really, yeah, a good thing for the domain. And the list of language server keeps growing. The list of lintel keeps growing and we can just integrate them with a few lines of Java in web developers. So it's really productive. Everything is open source under at least public license or MIT license. And that's my last word after I take questions. Any questions? Yeah? So the duty of the, we are the tool providers. Web developer is a tool. It's the duty of web developer to ship the language servers unless for this language there is a better way to do things. But here the language servers are embedded. The node packages that do the magic are inside the ID. You don't have to install them. Yes. Yes. The node, it's really stupid and that's what makes it work great. You start the process. You communicate with the process when you don't need it. You stop it. I mean the tool stop it. You as a user, it's not your problem. I mean, if the process is remaining when everything is closed and it's taking you some room, you open a bug to the provider saying, hey, man, you have to stop your process. Yeah, what's the deal? Yeah, we can go on because in the next session, Jan will demo the LSP support in NetBeans and NetBeans related LSP stuff. And we'll have time for questions after that. So maybe with one more demo, you'll get more questions or more and so on.
 I'm Michael Isriyay. I work for Red Hat in Alex team on Eclipse ID, a platform to language  server support, including build stuff and so on. And I'm going to tell you to show you  and by the way explain you how we made web developer, what components we're reusing and  what value it provides in Eclipse ID. So this is the web developer website where there  is a description of everything. But before we get into details of web developer, let's  think a few years back of how Eclipse was for web development three, four years ago.  So there was the legacy JavaScript development tools which were totally outdated and mostly  of bad quality. The HTML and CSS were not supporting the latest release. It was really  bad and I think we can Eclipse lost some users over the years for various reasons and I think  this reason can count for one million of users because the web tools were bad. But Eclipse  is still a very relevant ID for many ecosystems because it's free, open source, polyglot,  versatile, multi-platform, multi-projects, scalable, extensible, with built-in Git support,  good comparison tool, local history, good search feature, a lot of addition commands  and a huge and serious ecosystem. So for all this reason, we could not just let Eclipse  be bad at web development which is now 60% of the market of development. And we said,  okay, we need something better. It was the rise of language server. We'll use language  servers to do so and that's how Web Developer emerged and provided a lot of features for  web development that I'm going to demonstrate and go into detail. So let's get started.  This is a good old Eclipse ID with old-fashioned lighting that everyone can read in the room.  And we start by opening a CSS file. So I open the CSS file. Okay. This is a CSS file. It's  not the old CSS file. It's only Web Developer. The syntax of lighting is coming from text  mate. And you'll see that it has some addition features like documentation, color preview.  Here there is the outline. If I make a mistake here on purpose, it will show an error. The  error is shown in the usual views, the outline navigation. And the color preview. Yeah, color  preview has a color picture. That's one of the things I like to demonstrate because it's  just nice. It's not very important, but it's nice. And so we have all that for CSS. And  this is not something we implemented. We just picked the VS Code CSS language server. There  are people like Microsoft who did a good job regarding CSS. We just take their job, take  their work and reuse it just like they're reusing the Java compiler of Eclipse ID. So this is  for CSS. Another popular format is JSON. This is a JSON file. So if I put crappy JSON like  this, it will fail because it's not conformed to the JSON grammar. Okay. Same thing. Error  reporting, outline, and so on. And since JSON has schema in a strange way, but it has schema  support. Here I describe the schema. So we have the documentation. We have content assist.  How can I have content assist like this? So if I, what, maybe a Boolean here, module type,  or I can do that. True. And it should work because it's wrong typing. I can format. So  we have, it break the highlighting, but it's not a big deal. So we have a lot of features  coming also for JSON. And this is just like CSS, the VS code, JSON language server that  provides all that smartness. Integrating the JSON language server is exactly the same thing  as integrating the CSS language server instead that we start a different script to do the  magic. But there is no difference in the consumer code. So we have the schema completion. And  if I open a popular fine name like TS config, everyone knows the TS config, the schema is  built in. So you don't have to declare the schema, the ID declares the language server  already knows some schemas that are popular. So you don't have to add schema on popular  file like JSON or ESLint, like TS config or ESLint. Okay. That's CSS and JSON. I also  have the ML, but I need to save time. That's the non, the official reason. The non official  is that I have a bug with the ML in my demo. But we have XML. So the ML support when it's  working and when I demo it, it's actually a red dot based language server done by some  colleagues that we are using. Just like we use the CSS component from VS code, we are  using the ML component from red dot from NPMJS and just everything we do. More importantly,  the good old XML. We have a language server for XML. Alex mentioned it. It's currently  on GitHub on some repository, but it's going to be at the eclipse lemmings project next  week. And then it will be officially a Vendon neutral project. And what it does is that you  get typical grammar XML grammar checks. So it's plain XML meta grammar checks. So this  is invalid XML. It's reports invalid XML. And it has schema support for documentation or  completion or everything. So you get a full feature XML grammar language server. And soon  we'll have the extension for Maven, for example. So we'll add into this madness some things  that can give the value of distribution ID in your context and so on. That's really near  future. So we have formatting outline. Okay. That's for XML. Now let's get to the fun year  languages. My favorite, I would say for this demo is the HTML one. So we have an HTML file  which I open with a web browser and I reopen it with the editor. Okay. I put the web browser  here because it makes them nice. No. Thanks. I'll enable refresh. So we have the web browser,  the code editor with the outline and so on. I can break HTML with some bad stuff. Well,  I hope to make bad stuff in HTML. Oh, yeah. I wanted to show completion. So we have completion  for HTML elements as usual with documentation. This is coming from the HTML language server  from VS code. We get completion. We get automatically closing tabs. So if I put a and open a tag  next to slash a, we get control click on Ashraf and things like that so we can navigate to  the resources. And also, yes, that's about all for the basics. And if I change the text,  the cool thing I wanted to show is that with this navigator, okay, I did something wrong  in the style. I broke my CSS. So with this embedding navigator and auto refresh, we get  a very fast feedback loop when editing XML. So we have a fast edition thanks to long whichever  and we have a very fast feedback loop with the auto refresh in the web, in the internal  navigator. We have support for inline CSS. So here I have a bit of CSS in my HTML file.  We get the same CSS support that we have on plain CSS file because it's actually using  the same language server and those are good. So the VS code HTML language server will invoke  the VS code CSS language server to get the CSS assistance that you're seeing here. It's  the same one as VS code because it's the same engine. Always keep that in mind that the  same engine is the same result. And so with this fun thing, I can just change the color  with my super color picture and save and we get the color of the scene. We have also embedded  JavaScript support. So if I'm here, there is a button on click which say hello. If I  control click on it, it will find the say hello declaration in the HTML file. That's  a feature provided by the language server. And in this JavaScript file, we get some assistance.  So here if I run the variable I, it says it's a number. If I change it to be a string and  over again, it becomes a string. So the ID reacts properly to JavaScript change. We get  a completion. We get content assist and all that. So, oh yeah, one I can show is if I run  a variable and select it, I can do find references, which is a typical Eclipse operation. Find  references is usual. And if I hit enter, it didn't find the references. What did I do  wrong? Okay, I show it with the plain JS file, but it's strange. Very strange. Sorry. I am  too curious to search. Okay. It didn't work. But it works in real life. That's totally  intended. So you've seen there is support for JavaScript, but not all JavaScript, not  all web projects are frontend. You can have JavaScript services. So there is the hello.js  file. And we have support for plain JavaScript. Similarly to everything I show you, so I won't  go into detail. Control click. Assistance maybe here. I can try find references. I'm  taking risk as you can see. Whoa, whoa, whoa, whoa, whoa, whoa, whoa. Okay, something went  mad. Sorry about that. Okay. I'm back. You can enjoy the very fast startup that Lars  mentioned earlier today. Fuck. I'm meeting the wrong shortcut. That's something I opened  up about it. Sorry. Okay. Control three is better. Find references. Okay. Find references  doesn't work, but there is a rename. Okay. And you send the variable to new name and  the variable send. So we have the find references that you saw working very well. And the rename  as well. So that's all the typical feature you will need for JavaScript. And the same  language server that we are using, that is actually the TI JavaScript, TypeScript Long  Waste Server. Eclipse TI is one ID developed in the Eclipse ecosystem by some folks, which  is more targeted to be integrated, embeddable in a web browser. As part of this ID, they  have developed a long waste server for JavaScript and TypeScript that we are using here. And  here it's TypeScript. So we get the same thing for TypeScript. Yeah, rename. And so on. So  you got a regular flow. Yeah, there is format completion. That's all. The cool thing with  the TypeScript Long Waste Server is that it's used TypeScript TS server under the hood. So  if you open some project that has ESLint enabled, they will support ESLint. So they reuse the  configuration of your project directly. So here you have ESLint command because the tab  is not necessary here. So that's one cool thing of the TypeScript Long Waste Server is that  it's extensible just like TypeScript itself is extensible. And another one I can show you  is the Angular one. So the Angular Long Waste Server is done by the Google Angular team.  So we are picking the Long Waste Server. And we have a component, the JS, we can click  on the HTML and we see some completion. So there is field and title and I can control  click to get back to the TypeScript file. If I add a FOSDEM, a girl, lol like this and  get back to my HTML template. FOSDEM is there and it says the property. So yeah, again,  very good development flow. If I put a property that doesn't exist, I get a validation marker.  We tend to forget that the markers are more important than the completion in real life,  but you always get that. So that's very cool. We have got a very strong  tool suite for development in Eclipse ID for low cost because we just picked the pieces  from other projects. But developing is one activity of developer. I mean coding, editing.  It's one activity and I would even argue it's not the one that takes the most time and the  most smartness. The other one is debugging. Debugging is a very important activity. Actually,  when you were used to your debugger, you constantly have a debugger on and you're editing the  code you're debugging at least in Eclipse ID. That's how since we get the constant refresh,  I almost always have the target application starting and edit it and get the whole tree  load of the class and so on. So the debugger is really my favorite tool and I guess I'm  not even one. So if I get back to this load.js file, we have support for the debugger thanks  to the debug adapter protocol, which is a kind of friend of the language of a protocol. It's  also used by VS Code. It's also debugger agnostic language agnostic, everything agnostic. So  we could embed it just like the language of a protocol. And for the plain.js file, we  have the node debugger, which is the debug adapter coming from VS code, the same one.  And we can debug in a file just like we do usually in Java. So we have the breakpoint,  the code stack on the left, navigable code stack, step by step navigation, variable view,  and additions, and so on. So and the play, play, play, next. And the variable didn't  change because I, let's try again. I probably mistyped something. So the value did change  at runtime as expected. So this is a simple debugger, nothing fancy, it just works, does  the job for not for a cheap price because it's Microsoft team who did that. And last  but not least, the HTML file. This HTML file is dynamic, there is JavaScript and so on.  So we can do the same thing, except that instead of debugging directly with node, we can debug  with one of the browser which has an embeddable debugger. So I'll use Chrome for the demo.  Do I have the shortcuts here? Chrome debug? No. Debug has Chrome debug. And Chrome is  started, it says okay, it found the first breakpoint. Same thing, it's actually the  same, if you look in the details of the language, it's the same debugger for node and for Chrome  because when you debug node in VS code, it actually starts the V8 from inside Chromium  to do the stuff. So it's the same thing, you get the same features, that's normal. And  we can change the value, we can make it a string, a student and JavaScript doesn't really  mind. And we get that. And here I have my web page, if I click on say hello, we see that  even the inline, inline.js is there, so I can do the same thing. I is a string, let's  say it's hey, for them. Okay. F6, we can inspect the document also by the way. So where is  the document? That's the beauty with JavaScript, go find something in all these contexts. Okay,  you see it here. Maybe I can overrun it and get details. Yeah, too bad the size is not  perfect, but anyway, who needs that? So there is a small glitch and you see the message has  changed, hello here for them and just like in the Chrome debugger, the button has changed  as well. So I'm done with my demos and I'd love a few words to repeat what Alex said  because you're in a brainwashing session about LSP and debug adapter, so you have to  get the same thing over and over again. So the usage of language of a protocol on debug  adapter protocol has allowed us as a small team at Red Hat, leveraging LSP4j, LSP4e and  so on, which are major components, but once we have all that, it took us less than a year  to get from scratch to this if you couldn't have full time employees. It's even a matter  of months. It's a project we've been two or three working on one day a week or something  like that for two years. I think so, yeah. So the return of investment of using language  server in Eclipse ID is for us as developers. It's extremely high because it didn't cost  a thing, almost. It's really cheap and the value for users is very high because the language  server are of high quality and for that we can thank Microsoft for shipping those language  servers and Microsoft and Red Hat and everyone who do language server. And one cool thing  is that while doing this work, we have identified bugs in language server that we've reported.  The HTML support in VS Code, for example, is now slightly better because of a bug I  reported six months ago that got fixed. And when VS Code makes a new release with a new  CSS support, an incredible new tag, we get it for free. So we've got this factorization  not of, it's not even a technological factorization. We are really talking of a domain community  factorization and the mindset has changed. The collaboration between ideas is getting  much better, as Alex said. And that's really, yeah, a good thing for the domain. And the  list of language server keeps growing. The list of lintel keeps growing and we can just  integrate them with a few lines of Java in web developers. So it's really productive.  Everything is open source under at least public license or MIT license. And that's my last  word after I take questions. Any questions? Yeah?  So the duty of the, we are the tool providers. Web developer is a tool. It's the duty of  web developer to ship the language servers unless for this language there is a better  way to do things. But here the language servers are embedded. The node packages that do the  magic are inside the ID. You don't have to install them.  Yes. Yes. The node, it's really stupid and that's what makes it work great. You start  the process. You communicate with the process when you don't need it. You stop it. I mean  the tool stop it. You as a user, it's not your problem. I mean, if the process is remaining  when everything is closed and it's taking you some room, you open a bug to the provider  saying, hey, man, you have to stop your process. Yeah, what's the deal?  Yeah, we can go on because in the next session, Jan will demo the LSP support in NetBeans  and NetBeans related LSP stuff. And we'll have time for questions after that. So maybe  with one more demo, you'll get more questions or more and so on.
lspdebug_0_179.png lspdebug_180_2939.png lspdebug_2940_5519.png lspdebug_5520_5591.png lspdebug_5592_5699.png lspdebug_5700_5783.png lspdebug_5784_5975.png lspdebug_5976_9059.png lspdebug_9060_9131.png lspdebug_9132_9959.png lspdebug_9960_10031.png lspdebug_10032_10955.png lspdebug_10956_11315.png lspdebug_11316_11723.png lspdebug_11724_14327.png lspdebug_14328_14399.png lspdebug_14400_16247.png lspdebug_16248_16319.png lspdebug_16320_19979.png lspdebug_19980_20063.png lspdebug_20064_20363.png lspdebug_20364_20435.png lspdebug_20436_24779.png lspdebug_24780_25547.png lspdebug_25548_26699.png lspdebug_26700_26747.png lspdebug_26748_26795.png lspdebug_26796_32795.png lspdebug_32796_32919.png