mirror of
https://github.com/haskell/haskell-language-server.git
synced 2024-09-11 08:45:35 +03:00
* Remove GetDependencyInformation in favour of GetModuleGraph. Computing and storing GetDependencyInformation for each file essentially individually means that we perform downsweep on each file individually, wasting a lot of work and using an excessive amount of memory to store all these duplicated graphs individually. However, we already have the `GetModuleGraph` rule, which we need to compute before compiling files any way due to being depended on by `NeedsCompilation`, which needs to know if any reverse dependencies of the module we are compiling requires TH, which meant that each file already depends on the results of downsweep for the whole project. Instead, we can compute the whole graph once when we execute the `GetModuleGraph` rule and even use this inside `HscEnv.hsc_mod_graph` to avoid reconstructing the `ModuleGraph` on each invocation of `GhcSessionDeps`. There may be concerns about excessive build churn due to any change to the result of `GetModuleGraph` invalidating the result of `GhcSessionDeps` too often, but note that this only happens when something in the header of a module changes, and this could be solved easily be re-introducing a version of `GetDependencyInformation` with early cutoff that essentially returns the result of `GetModuleGraph` but includes the hash of only the `ModSummary`s in the downward dependency closure of the file. * module graph early cutoff early cutoff for eval plugin * allow running benchmarks on examples generated via a script * Add new benchmarks to config * Allow pathToId to fail * Errors --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
35 lines
1.0 KiB
Bash
Executable File
35 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Generate $DEPTH layers of modules with $WIDTH modules on each layer
|
|
# Every module on layer N imports all the modules on layer N-1
|
|
# MultiLayerModules.hs imports all the modules from the last layer
|
|
DEPTH=15
|
|
WIDTH=40
|
|
cat >hie.yaml << EOF
|
|
cradle:
|
|
direct:
|
|
arguments:
|
|
EOF
|
|
for i in $(seq -w 1 $WIDTH); do
|
|
echo "module DummyLevel0M$i where" > DummyLevel0M$i.hs;
|
|
echo " - DummyLevel0M$i.hs" >> hie.yaml;
|
|
done
|
|
for l in $(seq 1 $DEPTH); do
|
|
for i in $(seq -w 1 $WIDTH); do
|
|
echo "module DummyLevel${l}M$i where" > DummyLevel${l}M$i.hs;
|
|
echo " - DummyLevel${l}M$i.hs" >> hie.yaml;
|
|
for j in $(seq -w 1 $WIDTH); do
|
|
echo "import DummyLevel$((l-1))M$j" >> DummyLevel${l}M$i.hs;
|
|
done
|
|
done
|
|
done
|
|
case "$1" in
|
|
'--th')
|
|
echo "{-# LANGUAGE TemplateHaskell #-}" > MultiLayerModules.hs
|
|
;;
|
|
esac
|
|
echo "module MultiLayerModules where" >> MultiLayerModules.hs
|
|
echo " - MultiLayerModules.hs" >> hie.yaml;
|
|
for j in $(seq -w 1 $WIDTH); do
|
|
echo "import DummyLevel${DEPTH}M$j" >> MultiLayerModules.hs;
|
|
done
|