<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tutorial on Development using Neovim</title><link>https://shaaf.dev/nvim/tutorial/</link><description>Recent content in Tutorial on Development using Neovim</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://shaaf.dev/nvim/tutorial/index.xml" rel="self" type="application/rss+xml"/><item><title>Lesson 1: Project Setup</title><link>https://shaaf.dev/nvim/tutorial/01-project-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/01-project-setup/</guid><description>&lt;h1 id="lesson-1-project-setup"&gt;Lesson 1: Project Setup&lt;a class="anchor" href="#lesson-1-project-setup"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn how to create and open a Java project in Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a simple Java project structure&lt;/li&gt;
&lt;li&gt;Create Maven and Gradle projects&lt;/li&gt;
&lt;li&gt;Open projects in Neovim&lt;/li&gt;
&lt;li&gt;Navigate the file explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="creating-a-simple-java-project"&gt;Creating a Simple Java Project&lt;a class="anchor" href="#creating-a-simple-java-project"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start by creating a basic Java project structure manually:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create project directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p ~/java-projects/hello-neovim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ~/java-projects/hello-neovim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create standard Java directory structure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p src/main/java/com/example
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p src/test/java/com/example&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This creates the standard Maven/Gradle directory layout.&lt;/p&gt;</description></item><item><title>Lesson 2: Hello World</title><link>https://shaaf.dev/nvim/tutorial/02-hello-world/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/02-hello-world/</guid><description>&lt;h1 id="lesson-2-hello-world"&gt;Lesson 2: Hello World&lt;a class="anchor" href="#lesson-2-hello-world"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll write your first Java program in Neovim and learn the basics of editing with Vim motions.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write a simple Java program&lt;/li&gt;
&lt;li&gt;Understand Vim modes (Normal, Insert, Visual)&lt;/li&gt;
&lt;li&gt;Use basic editing commands&lt;/li&gt;
&lt;li&gt;Save and run your program&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vim-modes-quick-reference"&gt;Vim Modes Quick Reference&lt;a class="anchor" href="#vim-modes-quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Neovim has different modes for different tasks:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;th&gt;How to Enter&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Normal&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Navigate and execute commands&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Insert&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Type and edit text&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;o&lt;/code&gt;, etc.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Visual&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Select text&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;v&lt;/code&gt;, &lt;code&gt;V&lt;/code&gt;, &lt;code&gt;Ctrl-v&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Run commands&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;:&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: You&amp;rsquo;ll spend most time in Normal mode, briefly entering Insert mode to type.&lt;/p&gt;</description></item><item><title>Lesson 3: Code Completion</title><link>https://shaaf.dev/nvim/tutorial/03-code-completion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/03-code-completion/</guid><description>&lt;h1 id="lesson-3-code-completion"&gt;Lesson 3: Code Completion&lt;a class="anchor" href="#lesson-3-code-completion"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to use IntelliSense-style auto-completion powered by the Java Language Server (jdtls).&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use auto-completion while typing&lt;/li&gt;
&lt;li&gt;Navigate completion suggestions&lt;/li&gt;
&lt;li&gt;Accept and dismiss completions&lt;/li&gt;
&lt;li&gt;Understand completion sources (LSP, snippets, buffer)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-auto-completion-works"&gt;How Auto-Completion Works&lt;a class="anchor" href="#how-auto-completion-works"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Neovim4j uses &lt;code&gt;nvim-cmp&lt;/code&gt; for completion, which combines multiple sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LSP (jdtls)&lt;/strong&gt; - Intelligent Java completions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snippets&lt;/strong&gt; - Common code patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buffer&lt;/strong&gt; - Words from open files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt; - File paths&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="basic-completion-usage"&gt;Basic Completion Usage&lt;a class="anchor" href="#basic-completion-usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="auto-trigger"&gt;Auto-Trigger&lt;a class="anchor" href="#auto-trigger"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Start typing, and completions appear automatically:&lt;/p&gt;</description></item><item><title>Lesson 4: Creating Classes</title><link>https://shaaf.dev/nvim/tutorial/04-creating-classes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/04-creating-classes/</guid><description>&lt;h1 id="lesson-4-creating-classes"&gt;Lesson 4: Creating Classes&lt;a class="anchor" href="#lesson-4-creating-classes"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn different ways to create Java classes and use code actions to generate boilerplate code.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create classes using the file explorer&lt;/li&gt;
&lt;li&gt;Use fuzzy finder to create files quickly&lt;/li&gt;
&lt;li&gt;Generate constructors, getters, and setters&lt;/li&gt;
&lt;li&gt;Use code actions effectively&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="method-1-file-explorer"&gt;Method 1: File Explorer&lt;a class="anchor" href="#method-1-file-explorer"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The traditional way using nvim-tree:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open file explorer: &lt;code&gt;&amp;lt;Space&amp;gt;ne&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;src/main/java/com/example/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;a&lt;/code&gt; (add file)&lt;/li&gt;
&lt;li&gt;Type filename: &lt;code&gt;Person.java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The file opens, ready for editing.&lt;/p&gt;</description></item><item><title>Lesson 5: Managing Packages</title><link>https://shaaf.dev/nvim/tutorial/05-managing-packages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/05-managing-packages/</guid><description>&lt;h1 id="lesson-5-managing-packages"&gt;Lesson 5: Managing Packages&lt;a class="anchor" href="#lesson-5-managing-packages"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn how to organize Java code using packages and navigate package structures efficiently.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand Java package structure&lt;/li&gt;
&lt;li&gt;Create new packages&lt;/li&gt;
&lt;li&gt;Move classes between packages&lt;/li&gt;
&lt;li&gt;Navigate package hierarchies&lt;/li&gt;
&lt;li&gt;Handle package declarations and imports&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="understanding-java-packages"&gt;Understanding Java Packages&lt;a class="anchor" href="#understanding-java-packages"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Packages are Java&amp;rsquo;s way of organizing related classes. They:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prevent naming conflicts&lt;/li&gt;
&lt;li&gt;Control access with package-private visibility&lt;/li&gt;
&lt;li&gt;Make code easier to find and maintain&lt;/li&gt;
&lt;li&gt;Map to directory structure&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="package-naming-conventions"&gt;Package Naming Conventions&lt;a class="anchor" href="#package-naming-conventions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Standard format: &lt;code&gt;com.company.project.module&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Lesson 6: Buffer Navigation</title><link>https://shaaf.dev/nvim/tutorial/06-buffer-navigation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/06-buffer-navigation/</guid><description>&lt;h1 id="lesson-6-buffer-navigation"&gt;Lesson 6: Buffer Navigation&lt;a class="anchor" href="#lesson-6-buffer-navigation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to efficiently work with multiple files (buffers) open simultaneously in Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand buffers, windows, and tabs&lt;/li&gt;
&lt;li&gt;Switch between open files quickly&lt;/li&gt;
&lt;li&gt;Split windows horizontally and vertically&lt;/li&gt;
&lt;li&gt;Navigate between splits&lt;/li&gt;
&lt;li&gt;Manage buffer lifecycle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="understanding-buffers-windows-and-tabs"&gt;Understanding Buffers, Windows, and Tabs&lt;a class="anchor" href="#understanding-buffers-windows-and-tabs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="buffers"&gt;Buffers&lt;a class="anchor" href="#buffers"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;buffer&lt;/strong&gt; is an in-memory representation of a file. When you open a file, it loads into a buffer.&lt;/p&gt;</description></item><item><title>Lesson 7: Code Navigation</title><link>https://shaaf.dev/nvim/tutorial/07-code-navigation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/07-code-navigation/</guid><description>&lt;h1 id="lesson-7-code-navigation"&gt;Lesson 7: Code Navigation&lt;a class="anchor" href="#lesson-7-code-navigation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to navigate large Java codebases efficiently using LSP-powered features.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jump to definitions and declarations&lt;/li&gt;
&lt;li&gt;Find all references to a symbol&lt;/li&gt;
&lt;li&gt;Navigate type hierarchies&lt;/li&gt;
&lt;li&gt;Search for symbols across the project&lt;/li&gt;
&lt;li&gt;Use the jump list effectively&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="core-navigation-commands"&gt;Core Navigation Commands&lt;a class="anchor" href="#core-navigation-commands"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="go-to-definition"&gt;Go to Definition&lt;a class="anchor" href="#go-to-definition"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Place cursor on a class, method, or variable and press:&lt;/p&gt;</description></item><item><title>Lesson 8: Debugging</title><link>https://shaaf.dev/nvim/tutorial/08-debugging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/08-debugging/</guid><description>&lt;h1 id="lesson-8-debugging"&gt;Lesson 8: Debugging&lt;a class="anchor" href="#lesson-8-debugging"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to debug Java applications using Neovim&amp;rsquo;s DAP (Debug Adapter Protocol) integration.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set and remove breakpoints&lt;/li&gt;
&lt;li&gt;Start debug sessions&lt;/li&gt;
&lt;li&gt;Step through code&lt;/li&gt;
&lt;li&gt;Inspect variables&lt;/li&gt;
&lt;li&gt;Evaluate expressions&lt;/li&gt;
&lt;li&gt;Use the debug REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-is-dap"&gt;What is DAP?&lt;a class="anchor" href="#what-is-dap"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DAP (Debug Adapter Protocol) is like LSP but for debugging. Neovim4j uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvim-dap&lt;/code&gt; - Debug adapter client&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvim-dap-ui&lt;/code&gt; - Beautiful debug UI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvim-jdtls&lt;/code&gt; - Java debug adapter integration for jdtls&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="debug-ui-overview"&gt;Debug UI Overview&lt;a class="anchor" href="#debug-ui-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you start debugging, the UI shows:&lt;/p&gt;</description></item><item><title>Lesson 9: Testing</title><link>https://shaaf.dev/nvim/tutorial/09-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/09-testing/</guid><description>&lt;h1 id="lesson-9-testing"&gt;Lesson 9: Testing&lt;a class="anchor" href="#lesson-9-testing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to write, run, and manage JUnit tests directly from Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write JUnit tests&lt;/li&gt;
&lt;li&gt;Run individual tests&lt;/li&gt;
&lt;li&gt;Run test classes and test suites&lt;/li&gt;
&lt;li&gt;Interpret test results&lt;/li&gt;
&lt;li&gt;Debug failing tests&lt;/li&gt;
&lt;li&gt;Use test-driven development workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="junit-basics"&gt;JUnit Basics&lt;a class="anchor" href="#junit-basics"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="test-structure"&gt;Test Structure&lt;a class="anchor" href="#test-structure"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A typical JUnit test class:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; com.example;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.junit.Test;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import static&lt;/span&gt; org.junit.Assert.*;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CalculatorTest&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testAdd&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; calc.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(2, 3);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; assertEquals(5, result);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testDivide&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; calc.&lt;span style="color:#a6e22e"&gt;divide&lt;/span&gt;(10, 2);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; assertEquals(5, result);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;(expected &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ArithmeticException.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testDivideByZero&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; calc.&lt;span style="color:#a6e22e"&gt;divide&lt;/span&gt;(10, 0); &lt;span style="color:#75715e"&gt;// Should throw exception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="common-assertions"&gt;Common Assertions&lt;a class="anchor" href="#common-assertions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertEquals(expected, actual);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertTrue(condition);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertFalse(condition);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertNull(object);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertNotNull(object);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertSame(expected, actual); &lt;span style="color:#75715e"&gt;// Same reference&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertArrayEquals(expectedArray, actualArray);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="running-tests-in-neovim"&gt;Running Tests in Neovim&lt;a class="anchor" href="#running-tests-in-neovim"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="run-tests-via-build-tool"&gt;Run Tests via Build Tool&lt;a class="anchor" href="#run-tests-via-build-tool"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most reliable way to run tests is using your build tool directly:&lt;/p&gt;</description></item><item><title>Lesson 10: Common Workflows</title><link>https://shaaf.dev/nvim/tutorial/10-common-workflows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/10-common-workflows/</guid><description>&lt;h1 id="lesson-10-common-workflows"&gt;Lesson 10: Common Workflows&lt;a class="anchor" href="#lesson-10-common-workflows"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this final lesson, you&amp;rsquo;ll learn real-world workflows that combine everything you&amp;rsquo;ve learned into productive development patterns.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implement new features efficiently&lt;/li&gt;
&lt;li&gt;Fix bugs systematically&lt;/li&gt;
&lt;li&gt;Refactor code safely&lt;/li&gt;
&lt;li&gt;Work with existing codebases&lt;/li&gt;
&lt;li&gt;Optimize your development workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="workflow-1-implementing-a-new-feature"&gt;Workflow 1: Implementing a New Feature&lt;a class="anchor" href="#workflow-1-implementing-a-new-feature"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="scenario-add-user-authentication"&gt;Scenario: Add User Authentication&lt;a class="anchor" href="#scenario-add-user-authentication"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s implement a complete authentication feature.&lt;/p&gt;
&lt;h3 id="step-1-plan-the-implementation"&gt;Step 1: Plan the Implementation&lt;a class="anchor" href="#step-1-plan-the-implementation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Create a TODO list (use comments or &lt;code&gt;:TodoWrite&lt;/code&gt;):&lt;/p&gt;</description></item></channel></rss>