TypeScript 3.5.1 added a new 'Unknown' keyword which behaves similarly
to any, except when assigning a value to a variable that already holds a
value. This is not something we care about and so we can just treat it
as any.
This rule requires adding a new set of rules, tslint-etc.
no-unused-declaration used to be available in tslint:recommended but was
deprecated when --noUnusedVariables was added to typescript. The problem
with using TypeScript's --noUnusedVariables is that it turns unused
declarations into an error and prevents compilation, which isn't fun
when you're just prototyping things.
One of the possible problems of #1184 (firefox freezing periodically
with Tridactyl enabled) is that Tridactyl uses too much RAM, which could
cause Firefox to attempt to GC it from time to time.
One easy optimisation to try to reduce this problem is to use singletons
for metadata when possible (VoidType, AnyType...).
According to my measurements, this saves the allocation of 933 objects,
which amounted to ~0.03MB. Multiply this by 40 tabs and you get about
1.20MB saved, the space of a whole 1980-era floppy disk.
IndexedAccessTypes are things like Class[T] in the following function
declaration:
function fn<T keyof Class>(x: T, y: Class[T])
I do not see an easy way to take this into account for now so I'm just
replacing it with Any, hopefully we'll never actually need precise
metadata for types like this.
Before this commit, the compiler pass that generated metadata for
settings didn't generate informetion precise enough to be used to
validate settings that existed in objects (e.g. `logging.cmdline`).
This resulted in no typechecking being done for these settings (e.g.
`:set logging.cmdline 1` would not throw any errors). This commit fixes
that.
This commit makes the compiler pass use different classes in order to
represent the metadata. This enables adding per-class toString/convert
functions. This enables easy type checking and conversion in the `:set`
excmd.
We now generate doc/type metadata for classes. In order to do this, we
added a level of indirection to the metadata object, this makes telling
the difference between classes and functions easier.
This commit makes type information generated by our compiler pass more
precise. This lets us choose what information we want to display in the
command line.
This implements excmd completion. We're using the typescript compiler
API in order to get the documentation and the type of every function of
Tridactyl and generate a file named "src/metadata.ts" which contains
this information. Since this file is dependency-less it can be imported
from every source file.
We then write a regular completion source which just uses the data
contained in metadata.ts in order to generate its completions.