This reduces memory consumption by the runtime,
especially when using intellisense features which
may generate a lot of garbage.
There is an odd chance this can generate slow downs
in certain cases but, for that to happen, I would
expect the notebook to either have a lot of data
allocated or many users interacting with it and
triggering completion and other features at the same
time.
We don't worry about the second case because the
goal is to move completion to an ephemeral separate
process anyway, which would remove the need for GC
during completion altogether (and allow several
completions to run concurrently). If this happens,
we can consider moving GC out of the evaluator and
have the session explicitly trigger it once it
terminates a chain of evaluation.
It is also worth triggering the GC whenever
we forget an evaluation context.
* Add completion for struct keys
Largely ported from `IEx.Autocomplete`.
* Add test for __exception__ field in struct
* Fix exception test
* Fix exceptions assetion
* Create `:in_struct_field` identifier
Along with a refactor
* Fix typespecs for `:map_field`
* Address feedback
* Update lib/livebook/intellisense/identifier_matcher.ex
Co-authored-by: José Valim <jose.valim@gmail.com>
* Use markdown snippet for both docs
* Fix tests
Co-authored-by: José Valim <jose.valim@gmail.com>
* Make cell status italic when content changed
* Add Ctrl+Shift+Enter for evaluating all cells
* Improve the behaviour of evaluating all cells
* Fix typo
* Add keywords to completion
* Fix signature request caching for call without parentheses
* Don't insert parentheses for def* macros
* Don't trigger missing runtime message when auto completion is enabled
* Don't insert parentheses for keyword macros
* Improve completion of env macros
* Apply review comments
* Update locals without parentheses
* Apply suggestions from code review
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Format
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Improve file select layout on long paths
* Automatically back up notebooks without a file
* Run formatter
* Add margin when there are no sections
* Add an informative note about autosave directory
* Store autosave path instead of file in the config
* Rename autosave dir to autosave path
* Fix insert mode escape on section headlines
* Show ellipsis on selected file too
* Always create the default directory
* Apply review comments
* Remove Code.Fragment backport
* Fix tests compatibility with Elixir 1.13
* Implement signature intellisense
* Don't show signatures on module attributes
* Add tests for calls with do-end block
* Unify spec formatting
* Insert parentheses when completing a function call
* Send all text until cursor in signature request
* Add configuration for completion/signature popups (#693)
* Add editor settings form
* Add configuration for intellisense defaults
* Read fresh settings when editor mounts
* Scope attribute names
* Fix disabled button styling
* Simplify signature box and enable by default
* Split settings into system and user sections
* Update lib/livebook_web/live/settings_live.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/settings_live.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Fix spacing in documentation tests
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Add support for controls output type
* Split controls into individual widgets
* Adjust ids
* Improve widget and controls garbage collection
* Allow arbitrary functions as object release hook
* Add type to button and input events
* Add keyboard status event
* Change release hooks into monitor messages
* Rename pointer to reference and return an error on bad monitor
If we want to show process specific information,
we can create branches in the future that receive
a PID input, reach out to the remote node, and
show the data using markdown.
* Improve notebook file locking to work across nodes
* Add node check for local file system opreations
* Replace node with host id
* Refactor process down cleanup
* Scope local file system with node
* local? -> type
* save static vegalite plot to livemd
* cleanup debug code
* using `vega-lite` as the type in the fenced code block
* wrap the text output in `{:text, output}` in take_outputs/2
* ignore :vega_lite_static when it is empty
* add import and export tests
* using `spec`
* format code
* keep the test focused
* improve tests for not including outputs
* always dump vage_lite spec
* Apply suggestions from code review
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Remove configuration env vars on boot
* Update lib/livebook/application.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Move notebook export menu item
* Add action for clearing evaluation and outputs
* Test data operation
* Update wording
* Update wording
* Reorder menu items
* Show reconnect for all runtime types when applicable
* Make it clear which runtime is the default
* Show Mix.install restart suggestion only for standalone runtimes
* Fix tests not to rely on the default runtime tab