diff --git a/TEST_DIAGNOSTICS.md b/TEST_DIAGNOSTICS.md new file mode 100644 index 0000000..3b74c7a --- /dev/null +++ b/TEST_DIAGNOSTICS.md @@ -0,0 +1,93 @@ +# LSP Diagnostic Test Files + +These files are designed to trigger LSP diagnostics of all types to test the Paper Tonic Modern colorscheme's diagnostic virtual text colors. + +## Test Files + +### test-diagnostics.lua +Lua file with intentional errors for lua_ls (Lua Language Server). + +**Expected diagnostics:** +- **Errors** (red): Undefined variables/functions, type mismatches, invalid operations, wrong argument counts +- **Warnings** (orange): Unused variables, shadowing, unreachable code, lowercase globals +- **Hints** (green): Redundant code, style issues + +**Note**: lua_ls provides the best mix of diagnostic levels. + +### test-diagnostics.php +PHP file with intentional errors for Intelephense (PHP Language Server). + +**Expected diagnostics:** +- **Errors** (red): Most issues appear as errors by default in Intelephense + - Undefined functions/variables + - Type mismatches + - Wrong argument counts + - Invalid method calls + +**Note**: Intelephense is strict and reports most issues as errors. To see warnings/hints, configure in `.nvim.lua`: +```lua +return { + lsp = { + intelephense = { + settings = { + intelephense = { + diagnostics = { + undefinedSymbols = true, + undefinedVariables = true, + unusedSymbols = "hint", -- Show unused as hints + } + } + } + } + } +} +``` + +### test-diagnostics.js +JavaScript file with intentional errors for ts_ls (TypeScript Language Server). + +**Expected diagnostics:** +- **Errors** (red): Undefined variables/functions, invalid property access, missing parameters +- **Warnings** (orange): Unreachable code, type comparison issues, duplicate cases +- **Hints** (green): const vs let suggestions +- **Info** (blue): Unnecessary operations + +## How to Use + +1. Open any test file in Neovim: + ```bash + nvim test-diagnostics.lua + # or + nvim test-diagnostics.php + # or + nvim test-diagnostics.js + ``` + +2. Wait for LSP to attach and analyze the file (1-2 seconds) + +3. Check the virtual text diagnostics at the end of lines with issues + +4. Use `:LspInfo` to verify the LSP server is attached + +## Color Reference + +The Paper Tonic Modern colorscheme uses these colors for diagnostics: + +- **DiagnosticError** (virtual text): `#d70000` (bright red) on `#ffefef` background +- **DiagnosticWarn** (virtual text): `#d75f00` (orange) on `#ece0e0` background +- **DiagnosticInfo** (virtual text): `#8989af` (blue) on `#e0e0ec` background +- **DiagnosticHint** (virtual text): `#89af89` (green) on `#e0ece0` background + +## Testing Checklist + +- [ ] Errors show in red with red undercurl +- [ ] Warnings show in orange with orange undercurl +- [ ] Hints show in green +- [ ] Info messages show in blue +- [ ] Virtual text is readable against light background +- [ ] Sign column icons show correct colors +- [ ] Diagnostic floating windows display correctly + +## Debug Command + +Use the `hi` keymap to inspect highlight info under cursor and verify diagnostic colors are applied correctly. diff --git a/test-diagnostics.js b/test-diagnostics.js new file mode 100644 index 0000000..701496a --- /dev/null +++ b/test-diagnostics.js @@ -0,0 +1,73 @@ +/** + * Test file for JavaScript/TypeScript LSP diagnostics + * Tests error, warning, info, and hint virtual text colors + */ + +// ERROR: Undefined variable +console.log(undefinedVariable); + +// ERROR: Undefined function +nonexistentFunction(); + +// WARNING: Unused variable +const unusedVariable = "I'm never used"; + +// ERROR: Type error (if using TypeScript or JSDoc) +/** + * @param {string} name + * @param {number} age + */ +function greet(name, age) { + console.log(`Hello ${name}, you are ${age}`); +} +greet("Alice", "not a number"); // Type mismatch + +// WARNING: Unreachable code +function earlyReturn() { + return "done"; + console.log("Never executed"); // Unreachable +} + +// ERROR: Invalid property access +const obj = {}; +console.log(obj.nonexistent.nested.property); + +// WARNING: Comparison with different types +if ("5" == 5) { // Should use === + console.log("loose equality"); +} + +// ERROR: Missing parameter +greet("Bob"); // Missing age parameter + +// INFO: Unnecessary type assertion (TypeScript) +const num = 123; +const str = String(num); // Could be simplified + +// HINT: Variable can be const instead of let +let neverReassigned = "should be const"; +console.log(neverReassigned); + +// ERROR: Division by zero (some linters catch this) +const result = 10 / 0; + +// WARNING: Duplicate case label +const value = 1; +switch (value) { + case 1: + console.log("one"); + break; + case 1: // Duplicate case + console.log("one again"); + break; +} + +// ERROR: Invalid this context +const obj2 = { + name: "test", + greet: () => { + console.log(this.name); // Arrow function doesn't bind this + } +}; + +console.log("JavaScript diagnostic test complete!"); diff --git a/test-diagnostics.lua b/test-diagnostics.lua new file mode 100644 index 0000000..affe791 --- /dev/null +++ b/test-diagnostics.lua @@ -0,0 +1,84 @@ +-- Test file for LSP diagnostics - lua_ls +-- This file intentionally contains different diagnostic levels +-- to test diagnostic virtual text colors in paper-tonic-modern + +-- Define some valid code first +local valid_function = function() + return "valid" +end + +---@diagnostic disable-next-line: unused-local +local _ = valid_function() + +-- ERROR: Undefined global (lua_ls marks this as error) +print(undefined_global_variable) + +-- ERROR: Undefined function +undefined_function() + +-- WARNING: Unused local variable (lua_ls warning level) +local unused_variable = "I'm never used" + +-- WARNING: Lowercase global (should be local) +lowercase_global = "This should be local or uppercase" + +-- HINT: Redundant parentheses (some configs treat as hint) +local x = (5) +print(x) + +-- ERROR: Wrong number of arguments +local function takes_two_args(a, b) + return a + b +end +takes_two_args(1) -- Missing second argument (lua_ls error) + +-- ERROR: Attempting to call a non-function +local not_a_function = "string" +not_a_function() + +-- WARNING: Shadowing outer local +local shadow_me = 1 +do + local shadow_me = 2 -- Shadows outer local (warning) + print(shadow_me) +end + +-- ERROR: Invalid table access +local empty_table = {} +print(empty_table.nonexistent.deeply.nested.property) + +-- WARNING/HINT: Can be simplified +if true == true then -- Redundant comparison + print("always true") +end + +-- ERROR: Type annotation mismatch +---@type string +local should_be_string = 123 -- Assigning number to string type + +-- WARNING: Unreachable code after return +local function has_dead_code() + return "done" + print("This will never execute") -- Unreachable +end + +-- Valid function call +print(takes_two_args(1, 2)) + +-- ERROR: Calling vim API that doesn't exist +vim.nonexistent_function() + +-- HINT: Trailing whitespace or style issues (if configured) +local with_trailing_space = "value" +print(with_trailing_space) + +-- ERROR: Parameter type mismatch +---@param name string +---@param age number +local function greet(name, age) + print("Hello, " .. name .. ", you are " .. age) +end +greet(123, "not a number") -- Wrong types + +print("Diagnostic test complete!") + diff --git a/test-diagnostics.php b/test-diagnostics.php new file mode 100644 index 0000000..d82b9c0 --- /dev/null +++ b/test-diagnostics.php @@ -0,0 +1,70 @@ +someMethod(); + +// ERROR: Invalid array access (multiple levels) +$emptyArray = []; +echo $emptyArray['key']['nested']['deep']; + +// Valid function call +requiresTwoArgs("hello", "world"); + +// HINT/WARNING: Unreachable code (some configs) +function hasDeadCode(): string { + return "done"; + echo "This is unreachable"; // Dead code +} + +echo "Test complete!\n"; +