22
33A lightweight Neovim plugin written in Lua for quickly navigating printed Java stack traces and creating new Java files (Classes, Interfaces, Enums, Records, etc.) with the correct package declaration automatically determined from the current buffer or file explorer context.
44
5- ## ** ✨ Features**
5+ <!-- toc -->
6+
7+ - [ Features] ( #features )
8+ * [ Java Stack Trace Navigation] ( #java-stack-trace-navigation )
9+ * [ New File Creation] ( #new-file-creation )
10+ - [ Demos] ( #demos )
11+ * [ Selecting a line from a stack trace using Snacks picker] ( #selecting-a-line-from-a-stack-trace-using-snacks-picker )
12+ * [ Deobfuscate a stack trace in place in a log file] ( #deobfuscate-a-stack-trace-in-place-in-a-log-file )
13+ * [ Create a new Java class in same package as current Java file] ( #create-a-new-java-class-in-same-package-as-current-java-file )
14+ * [ Create a new type in the same package as current Java file] ( #create-a-new-type-in-the-same-package-as-current-java-file )
15+ - [ Installation and Configuration] ( #installation-and-configuration )
16+ * [ lazy.nvim] ( #lazynvim )
17+ - [ Usage] ( #usage )
18+ * [ ** 1\. Interactive File Creation** ] ( #1-interactive-file-creation )
19+ * [ ** 2\. Direct File Creation (Using Arguments)** ] ( #2-direct-file-creation-using-arguments )
20+ - [ ** 🔧 Configuration** ] ( #%F0%9F%94%A7-configuration )
21+ * [ ** Template Placeholders** ] ( #template-placeholders )
22+
23+ <!-- tocstop -->
24+
25+ ## Features
626
727### Java Stack Trace Navigation
828
929* Ability to jump to any line in a stack trace
10- * Supports nested Java exceptions
30+ * Supports nested Java exceptions so that navigation works in actual call order (not printed order)
1131* Use Snacks picker to select a line from stack trace
1232* All commands can get stack trace from current buffer (default) or a vim register (e.g '+' for system clipboard) if provided as extra argument to command
1333* Commands to quickly navigate up and down or to the top or bottom of the stack trace
34+ * Commands to go to next and previous stack trace (e.g when viewing a log file)
1435* Send stack trace to quickfix list
1536* Supports jdtls or java_language_server LSP in order to look up file path from class name
16-
17- ![ Java Stack Picker] ( https://github.com/NickJAllen/resources/blob/main/java-helpers/java-stack-picker.gif )
37+ * Quickly and easily deobfuscate stack traces (in place, on the clipboard, or just directly use the obfuscated one and it's deobfuscated automatically for you)
1838
1939### New File Creation
2040
@@ -24,18 +44,43 @@ A lightweight Neovim plugin written in Lua for quickly navigating printed Java s
2444* ** Customizable:** Easily override built-in templates or define your own custom templates.
2545* ** LSP Formatting:** Automatically formats the newly created file using the attached Language Server (via vim.lsp.buf.format()) if configured.
2646
27- ## ** ⚙️ Installation**
47+ ## Demos
48+
49+ ### Selecting a line from a stack trace using Snacks picker
50+
51+ Demonstation of the ": JavaHelpersPickStackTraceLine " command:
52+
53+ ![ Java Stack Picker] ( https://github.com/NickJAllen/resources/blob/main/java-helpers/java-stack-picker.gif )
54+
55+ ### Deobfuscate a stack trace in place in a log file
56+
57+ Demonstation of the ": JavaHelpersDeobfuscate " command:
58+
59+ ![ Inplace Stack Deobfuscation] ( https://github.com/NickJAllen/resources/blob/main/java-helpers/inplace-stack-deobfuscation.gif )
60+
61+ ### Create a new Java class in same package as current Java file
62+
63+ Demonstation of the ": JavaHelpersNewFile Class"
64+
65+ ![ New Class Creation] ( https://github.com/NickJAllen/resources/blob/main/java-helpers/new-class-creation.gif )
66+
67+ ### Create a new type in the same package as current Java file
68+
69+ Demonstation of the ": JavaHelpersNewFile "
70+
71+ ![ Java Stack Picker] ( https://github.com/NickJAllen/resources/blob/main/java-helpers/new-type-creation.gif )
72+
73+ ## Installation and Configuration
2874
2975Use your favorite package manager.
3076
31- ### ** lazy.nvim**
77+ ### lazy.nvim
3278
3379An example for lazy.nvim with some quick key bindings to navigate Java stack traces and to create Java files:
3480
3581```
36- {
82+ {
3783 'NickJAllen/java-helpers.nvim',
38-
3984 cmd = {
4085 'JavaHelpersNewFile',
4186 'JavaHelpersPickStackTraceLine',
@@ -44,58 +89,74 @@ An example for lazy.nvim with some quick key bindings to navigate Java stack tra
4489 'JavaHelpersGoDownStackTrace',
4590 'JavaHelpersGoToBottomOfStackTrace',
4691 'JavaHelpersGoToTopOfStackTrace',
92+ 'JavaHelpersGoToNextStackTrace',
93+ 'JavaHelpersGoToPrevStackTrace',
4794 'JavaHelpersSendStackTraceToQuickfix',
95+ 'JavaHelpersDeobfuscate',
96+ 'JavaHelpersSelectObfuscationFile',
97+ 'JavaHelpersForgetObfuscationFile',
4898 },
4999
50- -- Default options are shown here. If opts is missing or left empty then these defaults will be used.
100+ ---@type JavaHelpers.Config
51101 opts = {
52-
102+ new_file = {
53103 ---Each template has a name and some template source code.
54104 ---${package_decl} and ${name} will be replaced with the package declaration and name for the Java type being created.
55105 ---If ${pos} is provided then the cursor will be positioned there ready to type.
56- ---@type TemplateDefinition[]
57106 templates = {},
58107
59108 ---Defines patters to recognize Java source directories in order to determine the package name.
60- ---@type string[]
61- java_source_dirs = { "src/main/java", "src/test/java", "src" },
109+ java_source_dirs = { 'src/main/java', 'src/test/java', 'src' },
62110
63111 ---If true then newly created Java files will be formatted
64- ---@type boolean
65112 should_format = true,
66- },
113+ },
67114
68- -- Example keys - change these as you like
115+ stack_trace = {
116+ --Command that is used to deobfuscate stack traces
117+ deobfuscate_command = 'retrace',
118+
119+ --Directory that will be used to select an obfuscation mapping file, if nil or empty the current directory will be used
120+ obfuscation_mappings_dir = vim.uv.os_homedir() .. '/.obfuscation',
121+ },
122+ },
69123 keys = {
124+ -- New file creation
70125 { '<leader>jn', ':JavaHelpersNewFile<cr>', desc = 'New Java Type' },
71126 { '<leader>jc', ':JavaHelpersNewFile Class<cr>', desc = 'New Java Class' },
72127 { '<leader>ji', ':JavaHelpersNewFile Interface<cr>', desc = 'New Java Interface' },
73128 { '<leader>ja', ':JavaHelpersNewFile Abstract Class<cr>', desc = 'New Abstract Java Class' },
74129 { '<leader>jr', ':JavaHelpersNewFile Record<cr>', desc = 'New Java Record' },
75130 { '<leader>je', ':JavaHelpersNewFile Enum<cr>', desc = 'New Java Enum' },
76- { '<leader>jp', ':JavaHelpersPickStackTraceLine<cr>', desc = 'Pick Java stack trace line' },
77- { '<leader>jP', ':JavaHelpersPickStackTraceLine +<cr>', desc = 'Pick Java stack trace line from clipboard' },
131+
132+ -- Stack trace navigation
78133 { '<leader>jg', ':JavaHelpersGoToStackTraceLine<cr>', desc = 'Go to Java stack trace line' },
79- { '<leader>jG', ':JavaHelpersGoToStackTraceLine +<cr>', desc = 'Go to Java stack trace line on clipboard' },
134+ { '<leader>jG', ':JavaHelpersGoToStackTraceLine +<cr>', desc = 'Go to Java stack trace line on Clipboard' },
135+ { '<leader>jp', ':JavaHelpersPickStackTraceLine<cr>', desc = 'Pick Java stack trace line' },
136+ { '<leader>jP', ':JavaHelpersPickStackTraceLine +<cr>', desc = 'Pick Java stack trace line from Clipboard' },
80137 { '[j', ':JavaHelpersGoUpStackTrace<cr>', desc = 'Go up Java stack trace' },
81138 { ']j', ':JavaHelpersGoDownStackTrace<cr>', desc = 'Go down Java stack trace' },
139+ { '[J', ':JavaHelpersGoToPrevStackTrace<cr>', desc = 'Go to previous Java stack trace' },
140+ { ']J', ':JavaHelpersGoToNextStackTrace<cr>', desc = 'Go to next Java stack trace' },
82141 { '<leader>jt', ':JavaHelpersGoToTopOfStackTrace<cr>', desc = 'Go to top of Java stack trace' },
83142 { '<leader>jb', ':JavaHelpersGoToBottomOfStackTrace<cr>', desc = 'Go to bottom of Java stack trace' },
84143 { '<leader>jq', ':JavaHelpersSendStackTraceToQuickfix<cr>', desc = 'Send Java stack trace to quickfix list' },
85- { '<leader>jQ', ':JavaHelpersSendStackTraceToQuickfix +<cr>', desc = 'Send Java stack trace on clipboard to quickfix list' },
144+ { '<leader>jd', ':JavaHelpersDeobfuscate<cr>', desc = 'Deofuscate Java stack trace' },
145+ { '<leader>jD', ':JavaHelpersDeobfuscate +<cr>', desc = 'Deofuscate Java stack trace on Clipboard' },
146+ { '<leader>jo', ':JavaHelpersSelectObfuscationFile<cr>', desc = 'Select obfuscation file' },
86147 },
87-
88148 dependencies = {
89149 'nvim-lua/plenary.nvim',
90150
91- -- This is only needed if you want to use the JavaHelpersPickStackTraceLine command (but highly recommended)
151+ -- This is only needed if you want to use the JavaHelpersPickStackTraceLine or JavaHelpersSelectObfuscationFile commands (but highly recommended)
92152 'folke/snacks.nvim',
93153 },
94- },
154+ }
155+
95156
96157```
97158
98- ## ** 🚀 Usage**
159+ ## Usage
99160
100161The plugin exposes the following user commands:
101162
0 commit comments