LuaLS / LuaLS/lua-language-server

[Feature request] Implicit casts for common conversions

Ouverte
#3,027 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Lua
Étoiles
4.4k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I got some code for parsing command line flags/user inputs that commonly uses patterns like this

```
---@return string ...
local function strsplit(str, sep) end

local a, b, c = strsplit(userinput, ",")
b = tonumber(b) or 0 -- error: This variable is defined as type `string`. Cannot convert its type to `number`
```

The fix is to define b as `string|number` in the declaration, but it's a bit cumbersome, especially if I just want `b` as a number:

```
local a,
---@type number|string
b, c = strsplit(userinput, ",")
```

So it would be nice if common type conversion patterns like this could be recognized automatically and either allow the cast or infer the type as string|number from the beginning.

Edit: See [comment below](https://github.com/LuaLS/lua-language-server/issues/3027#issuecomment-2572687841), the implicit cast is already happening, this is really about type inference based on later assignments. Which may or may not be a good idea.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par retracer le comportement existant d'implicit-cast et de type-inference décrit dans l'issue, en particulier la manière dont les affectations ultérieures influencent une déclaration de variable antérieure. Définissez les règles d'inférence attendues et vérifiez-les à l'aide de l'exemple d'analyse de la ligne de commande ; le travail est terminé lorsqu'un comportement convenu est établi et que des tests couvrent le type inféré obtenu.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
lua
Domaine
devtools
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.