Tags: seachel/sorbet
Tags
Allow :const nodes in deserialize nil handler (sorbet#2861)
Emit raw, pre-formatted values for timestamps (sorbet#2858) This gets us back to parity with what tracing.cc was doing before I refactored it to use rapidjson instead of fmt::format_to. We use `fmt::format` to turn a fixed `int64_t` into a floating point number with 3 digits of precision (rather than dividing by 1000.0). `writer.String` takes that std::string and treats it as a JSON string when serializing it (so the type of `"ts"` is a JSON strong). On the other hand `writer.RawValue` takes that std::string and treats it as an already-formatted JSON value, with a given type. That makes the type for `"ts"` back into a number.
Replace fmt with rapidjson in tracing.cc (sorbet#2855) * Replace fmt with rapidjson in tracing.cc This ensures that all of the JSON is properly escaped, even in the presence of UTF-8 non-ASCII characters in the strings. * Add failing test
Also make macOS timers faster (sorbet#2856)
Add support for tracing tests (sorbet#2857) This helped me diagnose where the slowness in the constant_all_kinds completion test was coming from, so I figure we may as well leave it checked in for ease of future debugging. For future reference, my preferred way of using this flag is: 1. Run the test via bazel, to ensure that all the files are built: `bazel test --config=dbg --test_output=all //test:test_LSPTests/testdata/my/test` 2. In the output near the top, there will be a line that shows how the test runner was invoked (with what flags): `bazel-bin/test/test_corpus_runner --single_test=... --gtest_filter=...` 3. I copy / paste that line into my terminal, and append a `--web-trace-file=trace.json` argument. That drops a `trace.json` file into the top-level of the Sorbet folder. (This "run the test directly at the command line" technique is also useful, because you can take the binary and run `perf` or `lldb` over it too, or load it up in `Instruments.app`).
Turn off ErrorBuilders during LSP queries (sorbet#2852) * Turn off fuzzy suggestions in resolver during LSP queries We drop any errors discovered when making a query on the floor, so it doesn't make sense to spend time in resolver making those error messages better by adding "Did you mean" suggestions for missing constants. In particular, the findMemberFuzzyMatch search is crazy slow. As measured on //test:test_LSPTests/testdata/disabled/lsp/completion/constants_all_kinds in debug mode, this change improves perf when testing on my MacBook Pro: - from 7s to 2.5s (when ENFORCEs don't have Timers) - from 42s to 9s (when ENFORCEs have Timers) I'm still not sure why adding ENFORCEs to Timers makes it so much slower, but I plan to timebox looking into that too. Regardless, this should have a huge effect on our entire test suite. * Re-enable constants_all_kinds LSP test * Don't compute errors when there's an active LSP query Make the `if (auto e = ...beginError...)` lines return false to skip running their bodies when there's an LSP query, because LSP uses other mechanism (not loc / symbol / etc. queries) to collect and report errors back. This should make certain LSP methods like completion a little bit faster.
Add some FAQs (sorbet#2851) * Add some FAQs * cd website && yarn prettier
Add print statement to help lldb debugging (sorbet#2850) There used to be something in the bazel test output that would show the command and arguments it ran when running a test. This was super helpful, because it could be copy/pasted after `lldb --` and then you could start debugging. I think probably one of the bazel upgrades killed that. Instead, I opted to just add back the print statement manually in our forwarder: ==================== Test output for //test:test_LSPTests/testdata/lsp/completion/constants_all_kinds: bazel-bin/test/test_corpus_runner --single_test=test/testdata/lsp/completion/constants_all_kinds.rb --gtest_filter=LSPTests/\* Note: Google Test filter = LSPTests/* [==========] Running 1 test from 1 test suite. ...
Ignore slow completion test to fix master (sorbet#2849) This was taking over a minute in CI. (It took about 20s and finished on the buildbox, so we know that it terminates). Disabling to get master passing again, but we should re-enable.
Fix tracing.cc after faster-timers PR (sorbet#2844) * Add failing test * Web trace file format requires floating point timestamps Also, I had forgotten to change "now" to use clock_gettime_coarse. It was instead using steady_clock still, which generates completion incomparable timestamps (so when those timestamps were both converted to unit-less floating point numbers, it looked like the counters had a timestamp of weeks in the future compared to the timestamps of the floating point numbers). * Change the way ENFORCE timers are printed Having no spaces in the Timer name makes them format a little bit nicer in the web trace file viewer in Chrome (don't get a line break where the space is if there's no space). * Fix failing test
PreviousNext