Update java instructions now YCM has nice API for it
This commit is contained in:
parent
3bf461c621
commit
ccf427a7c8
4 changed files with 107 additions and 31 deletions
115
README.md
115
README.md
|
|
@ -142,6 +142,7 @@ with little effort, and are supported as first-class languages.
|
||||||
- Python 2 and Python 3
|
- Python 2 and Python 3
|
||||||
- TCL
|
- TCL
|
||||||
- Bash scripts
|
- Bash scripts
|
||||||
|
- Java
|
||||||
|
|
||||||
## Languages known to work
|
## Languages known to work
|
||||||
|
|
||||||
|
|
@ -149,7 +150,6 @@ The following languages are used frequently by the author, but require some sort
|
||||||
of hackery that makes it challenging to support generally. These languages are
|
of hackery that makes it challenging to support generally. These languages are
|
||||||
on a best-efforts basis:
|
on a best-efforts basis:
|
||||||
|
|
||||||
- Java (see caveats)
|
|
||||||
- C# (c-sharp) using dotnet core
|
- C# (c-sharp) using dotnet core
|
||||||
- Go (requires separate installation of [Delve][])
|
- Go (requires separate installation of [Delve][])
|
||||||
- Node.js (requires node <12 for installation)
|
- Node.js (requires node <12 for installation)
|
||||||
|
|
@ -259,18 +259,19 @@ categorised as follows:
|
||||||
* `Experimental`: Working, but not frequently used and rarely tested
|
* `Experimental`: Working, but not frequently used and rarely tested
|
||||||
* `Legacy`: No longer supported, please migrate your config
|
* `Legacy`: No longer supported, please migrate your config
|
||||||
|
|
||||||
| Language | Status | Switch | Adapter | Dependencies |
|
| Language | Status | Switch | Adapter | Dependencies |
|
||||||
|------------------|--------------|--------------------------------|---------------------|---------------------------------|
|
|------------------|--------------|--------------------------------|---------------------|--------------------------------------------|
|
||||||
| C, C++, etc. | Tested | `--all` or `--enable-c` | vscode-cpptools | mono-core |
|
| C, C++, etc. | Tested | `--all` or `--enable-c` | vscode-cpptools | mono-core |
|
||||||
| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
|
| Python | Tested | `--all` or `--enable-python` | debugpy | Python 2.7 or Python 3 |
|
||||||
| Go | Tested | `--enable-go` | vscode-go | Go, [Delve][] |
|
| Go | Tested | `--enable-go` | vscode-go | Go, [Delve][] |
|
||||||
| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
|
| TCL | Supported | `--all` or `--enable-tcl` | tclpro | TCL 8.5 |
|
||||||
| Bourne Shell | Supported | `--all` or `--enable-bash` | vscode-bash-debug | Bash v?? |
|
| Bourne Shell | Supported | `--all` or `--enable-bash` | vscode-bash-debug | Bash v?? |
|
||||||
| Node.js | Supported | `--force-enable-node` | vscode-node-debug2 | 6 < Node < 12, Npm |
|
| Node.js | Supported | `--force-enable-node` | vscode-node-debug2 | 6 < Node < 12, Npm |
|
||||||
| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
|
| Javascript | Supported | `--force-enable-chrome` | debugger-for-chrome | Chrome |
|
||||||
| C# (dotnet core) | Experimental | `--force-enable-csharp` | netcoredbg | DotNet core |
|
| Java | Supported | `--force-enable-java ` | vscode-java-debug | Compatible LSP plugin (see [later](#java)) |
|
||||||
| C# (mono) | Experimental | `--force-enable-csharp` | vscode-mono-debug | Mono |
|
| C# (dotnet core) | Experimental | `--force-enable-csharp` | netcoredbg | DotNet core |
|
||||||
| Python.legacy | Legacy | `--force-enable-python.legacy` | vscode-python | Node 10, Python 2.7 or Python 3 |
|
| C# (mono) | Experimental | `--force-enable-csharp` | vscode-mono-debug | Mono |
|
||||||
|
| Python.legacy | Legacy | `--force-enable-python.legacy` | vscode-python | Node 10, Python 2.7 or Python 3 |
|
||||||
|
|
||||||
For other languages, you'll need some other way to install the gadget.
|
For other languages, you'll need some other way to install the gadget.
|
||||||
|
|
||||||
|
|
@ -1056,16 +1057,85 @@ It allows you to debug scripts running inside chrome from within Vim.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Java - partially supported
|
## Java
|
||||||
|
|
||||||
* Java Debug Server. The [java debug server][java-debug-server] runs as a
|
Vimsepctor works well with the [java debug server][java-debug-server], which
|
||||||
jdt.ls plugin, rather than a standalone debug adapter. This makes a lot
|
runs as a jdt.ls (Java Language Server) plugin, rather than a standalone
|
||||||
of sense if you already happen to be running the language server.
|
debug adapter.
|
||||||
Vimspector is not in the business of running language servers. So, rather
|
|
||||||
than doing so, vimspector simply allows you to start the java debug server
|
Vimspector is not in the business of running language servers, only debug
|
||||||
manually (however you might do so) and you can tell vimspector the port
|
adapters, so this means that you need a compatible Language Server Protocol
|
||||||
on which it is listening. See [this issue](https://github.com/puremourning/vimspector/issues/3)
|
editor plugin to use Java. I recommend [YouCompleteMe][], which has full support
|
||||||
for more background.
|
for jdt.ls, and most importantly a trivial way to load the debug adapter and to
|
||||||
|
use it with Vimspector.
|
||||||
|
|
||||||
|
### Usage with YouCompleteMe
|
||||||
|
|
||||||
|
* Set up [YCM for java][YcmJava].
|
||||||
|
* Get Vimspector to download the java debug plugin:
|
||||||
|
`install_gadget.py --force-enable-java <other options...>`
|
||||||
|
* Configure Vimspector for your project using the `vscode-java` adapter, e.g.:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"configurations": {
|
||||||
|
"Java Attach": {
|
||||||
|
"adapter": "vscode-java",
|
||||||
|
"configuration": {
|
||||||
|
"request": "attach",
|
||||||
|
"hostName": "${host}",
|
||||||
|
"port": "${port},
|
||||||
|
"sourcePaths": [
|
||||||
|
"${workspaceRoot}/src/main/java",
|
||||||
|
"${workspaceRoot}/src/test/java",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Tell YCM to load the debugger plugin and create a mapping, such as
|
||||||
|
`<leader><F5>` to start the debug server and launch vimspector, e.g. in
|
||||||
|
`~/.vim/ftplugin/java.vim`:
|
||||||
|
|
||||||
|
```viml
|
||||||
|
" Tell YCM where to find the plugin. Add to any existing values.
|
||||||
|
let g:ycm_java_jdtls_extension_path = [
|
||||||
|
\ '</path/to/Vimspector/gadgets/<os>'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
let s:jdt_ls_debugger_port = 0
|
||||||
|
function! s:StartDebugging()
|
||||||
|
if s:jdt_ls_debugger_port <= 0
|
||||||
|
" Get the DAP port
|
||||||
|
let s:jdt_ls_debugger_port = youcompleteme#GetCommandResponse(
|
||||||
|
\ 'ExecuteCommand',
|
||||||
|
\ 'vscode.java.startDebugSession' )
|
||||||
|
|
||||||
|
if s:jdt_ls_debugger_port == ''
|
||||||
|
echom "Unable to get DAP port - is JDT.LS initialized?"
|
||||||
|
let s:jdt_ls_debugger_port = 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Start debugging with the DAP port
|
||||||
|
call vimspector#LaunchWithSettings( { 'DAPPort': s:jdt_ls_debugger_port } )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Leader><F5> :call <SID>StartDebugging()<CR>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then use `<Leader><F5>` to start debugging rather than just `<F5>`.
|
||||||
|
|
||||||
|
### Other LSP clients
|
||||||
|
|
||||||
|
See [this issue](https://github.com/puremourning/vimspector/issues/3) for more
|
||||||
|
background.
|
||||||
|
|
||||||
|
## Other servers
|
||||||
|
|
||||||
* Java - vscode-javac. This works, but is not as functional as Java Debug
|
* Java - vscode-javac. This works, but is not as functional as Java Debug
|
||||||
Server. Take a look at [this
|
Server. Take a look at [this
|
||||||
|
|
@ -1122,3 +1192,4 @@ Copyright © 2018 Ben Jackson
|
||||||
[vimspector-ref-var]: https://puremourning.github.io/vimspector/configuration.html#replacements-and-variables
|
[vimspector-ref-var]: https://puremourning.github.io/vimspector/configuration.html#replacements-and-variables
|
||||||
[vimspector-ref-exception]: https://puremourning.github.io/vimspector/configuration.html#exception-breakpoints
|
[vimspector-ref-exception]: https://puremourning.github.io/vimspector/configuration.html#exception-breakpoints
|
||||||
[debugpy]: https://github.com/microsoft/debugpy
|
[debugpy]: https://github.com/microsoft/debugpy
|
||||||
|
[YouCompleteMe]: https://github.com/ycm-core/YouCompleteMe#java-semantic-completion
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ GADGETS = {
|
||||||
'adapters': {
|
'adapters': {
|
||||||
"vscode-java": {
|
"vscode-java": {
|
||||||
"name": "vscode-java",
|
"name": "vscode-java",
|
||||||
"port": "ask",
|
"port": "${DAPPort}",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -373,7 +373,8 @@ class VariablesView( object ):
|
||||||
|
|
||||||
def handler( message ):
|
def handler( message ):
|
||||||
# TODO: this result count be expandable, but we have no way to allow the
|
# TODO: this result count be expandable, but we have no way to allow the
|
||||||
# user to interact with the balloon to expand it.
|
# user to interact with the balloon to expand it, unless we use a popup
|
||||||
|
# instead, but even then we don't really want to trap the cursor.
|
||||||
body = message[ 'body' ]
|
body = message[ 'body' ]
|
||||||
result = body[ 'result' ]
|
result = body[ 'result' ]
|
||||||
if result is None:
|
if result is None:
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,7 @@
|
||||||
{
|
{
|
||||||
"adapters": {
|
|
||||||
"java-debug-server": {
|
|
||||||
"name": "vscode-java",
|
|
||||||
"port": "ask"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"Java Launch": {
|
"Java Launch": {
|
||||||
"adapter": "java-debug-server",
|
"adapter": "vscode-java",
|
||||||
"configuration": {
|
"configuration": {
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"mainClass": "com.vimspector.test.TestApplication",
|
"mainClass": "com.vimspector.test.TestApplication",
|
||||||
|
|
@ -18,6 +12,16 @@
|
||||||
"console": "integratedTerminal"
|
"console": "integratedTerminal"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Java Attach": {
|
||||||
|
"adapter": "vscode-java",
|
||||||
|
"configuration": {
|
||||||
|
"request": "attach",
|
||||||
|
"sourcePaths": [ "${workspaceRoot}/src/main/java" ],
|
||||||
|
"stopOnEntry": true,
|
||||||
|
"hostName": "localhost",
|
||||||
|
"port": "${JVMDebugPort}"
|
||||||
|
}
|
||||||
|
},
|
||||||
"Attach with vscode-javac": {
|
"Attach with vscode-javac": {
|
||||||
"adapter": "vscode-javac",
|
"adapter": "vscode-javac",
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue