Comments (5)
The initial implementation of type system is included in 2022-11-07.
Currently type inference is done in individual files and have no information input. Polymorphism is also not implemented yet. But it already improved the completion experience a lot.
from nil.
Since 2 is easy and mostly works, if there are cases where it's not sufficient a way to annotate (a comment after the arg?) the correct type could be useful.
I like the idea of for flakes being able to evaluate the flake and its outputs and record the types things had during that evaluation so they're guaranteed to be right. Could even record multiple types when something has different types depending on where it's called. That also sounds really hard.
from nil.
An idea I have about this issue is to possibly use type annotations or otherwise say where the things going into some lambda come from, since it will be different in NixOS modules (regrettably).
Like:
# @type callPackage
{ hello, stdenv }: ....
from nil.
Type schema of flake.nix
is implemented since d044c9c. Completion of inputs and known input fields like outPath
, modifiedDate
work now. But since we don't evaluate flakes yet, their real output cannot be completed.
Flake output fields also work, but only when a direct Attrset literal is given in the output. If you use other wrappers like flake-utils
, it will not work currently.
from nil.
Ideally this could be extended to even provide diagnostics.
I thought, one could start with typing all builtins and maybe nixpkgs.lib
and then inferring every time there is a guaranteed type conflict, i.e. when someone swaps the arguments of map
.
from nil.
Related Issues (20)
- Merging recursive and non-recursive attrsets panics
- "I" being capitalised in the README HOT 2
- Do you use HM type inference? HOT 1
- Completion in Doom Emacs doesn't work HOT 2
- Typo in the "about" section HOT 1
- `nix profile install --override-inputs` fails with "Git changes are not committed" HOT 1
- Manix Support HOT 1
- Nil not updating UI or stuck on loading HOT 1
- Fail silently (or silenter) HOT 3
- Formatting (with alejandra) not working anymore HOT 1
- Diagnostics for multiple files
- Better handling of the formatter HOT 1
- Wrong return code on nil diagnostics HOT 2
- `pack_bindings` action unavailable unless nested attrset already exists
- My LSP client doesn't support confirmation error
- `__curPos` is not highlighted
- Completions only showing after typing a letter HOT 2
- nil_ls crashes on formatting buffer using Alejandra HOT 2
- Crash when creating new files in the workspace HOT 1
- Random crash HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nil.