sts4 icon indicating copy to clipboard operation
sts4 copied to clipboard

use DiagnosticTag.Unnecessary for validations that point out unnecessary things

Open martinlippert opened this issue 1 year ago • 1 comments

We have diagnostics in place that point out unnecessary things:

  • Unnecessary @Autowired annotation on constructors
  • Unnecessary @PathVariable annotation when the name matches the parameter name (maybe more?)

We should include the DiagnosticTag.Unnecessary in the resulting diagnostic marker. It allows the client to render the part in the editor faded out.

https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnosticTag

(Whether this works in Eclipse would be an additional thing to verify)

martinlippert avatar Sep 05 '24 06:09 martinlippert

About

Unnecessary @PathVariable annotation when the name matches the parameter name (maybe more?)

Do you mean about:

From

@GetMapping(path={"/ciencias/{id}","/ciencias/{id}.html"})
String findOneById(Model model, @PathVariable(name="id") Integer id) {
	model.addAttribute("ciencia", cienciaService.findById(id));
	return "ciencia/findOne";
}

To

@GetMapping(path={"/ciencias/{id}","/ciencias/{id}.html"})
String findOneById(Model model, @PathVariable Integer id) {
	model.addAttribute("ciencia", cienciaService.findById(id));
	return "ciencia/findOne";
}

Therefore from @PathVariable(name="id") to @PathVariable. It thanks to:

  • "/ciencias/{id}"
  • "/ciencias/{id}.html"

If yes, it applies for @RequestParam too such as:

From

@GetMapping(path={"/ciencia","/ciencia.html"})
String findOneById(Model model, @RequestParam(name="id") Integer id) {
	model.addAttribute("ciencia", cienciaService.findById(id));
	return "ciencia/findOne";
}

To

@GetMapping(path={"/ciencia","/ciencia.html"})
String findOneById(Model model, @RequestParam Integer id) {
	model.addAttribute("ciencia", cienciaService.findById(id));
	return "ciencia/findOne";
}

But here is tricky because the URL is unknown until runtime

manueljordan avatar Sep 05 '24 15:09 manueljordan

@manueljordan This issue is purely about adopting the DiagnosticTag capability of the language server protocol to mark diagnostics as deprecated or unnecessary, so that the client can render those diagnostics accordingly. The two mentioned annotations were just examples.

The validation that you mentioned for @RequestParam already shipped a few releases ago.

martinlippert avatar Nov 18 '24 12:11 martinlippert

Fixed with https://github.com/spring-projects/sts4/commit/e285e3abb76c75ae321f3020e44f542a3dea4141

martinlippert avatar Nov 18 '24 12:11 martinlippert