crates/ty_completion_bench/README.md
This directory contains a very small command line tool for ad hoc benchmarking and profiling of ty's completions.
This example shows how to run completions in a freshly created project. This is useful for testing completions in a fairly isolated and greenfield environment, but with potentially one or more interesting dependencies.
mkdir completion-ad-hoc-benchmarking
cd completion-ad-hoc-benchmarking
uv init --app
uv add numpy pandas scikit-learn scipy matplotlib
echo 'read_csv' > main.py
And then run the benchmark as if requesting completions when the cursor
is positioned after read_csv (byte offset 8):
path/to/ruff/checkout/target/profiling/ty_completion_bench main.py 8 -q --iters 200
Has this output:
total elapsed for initial completions request: 156.942768ms
total elapsed: 1.137609166s, time per completion request: 5.688045ms
This runs the uncached case once and then repeats the call 200 times (the
cached case). You can then attach your favorite profiling tool such as cargo flamegraph, perf or samply to the invocation.
The -q/--quiet flag can be removed to see the actual completions offered.
You can point this tool at any project where uv sync works. For example, to run
completions inside the context of the Home Assistant project:
git clone https://github.com/home-assistant/core home-assistant-core
cd home-assistant-core
echo ATTRREMDU > scratch.py
And now run completions once (the uncached case) as if the cursor was
positioned immediately after ATTRREMDU (byte offset 9):
path/to/ruff/checkout/target/profiling/ty_completion_bench scratch.py 9
Has this output:
total elapsed for initial completions request: 396.41251ms
ATTR_REMAINING_DURATION (module: homeassistant.components.homekit_controller.switch)
ATTR_RESET_VACUUM_SIDE_BRUSH (module: homeassistant.components.xiaomi_miio.button)
homeassistant.components.overkiz.water_heater.atlantic_domestic_hot_water_production_mlb_component (module: homeassistant.components.overkiz.water_heater.atlantic_domestic_hot_water_production_mlb_component)
homeassistant.components.overkiz.water_heater.atlantic_domestic_hot_water_production_v2_io_component (module: homeassistant.components.overkiz.water_heater.atlantic_domestic_hot_water_production_v2_io_component)
homeassistant.components.overkiz.water_heater.domestic_hot_water_production (module: homeassistant.components.overkiz.water_heater.domestic_hot_water_production)
homeassistant.components.radio_browser.media_source (module: homeassistant.components.radio_browser.media_source)
homeassistant.components.recorder.models.state_attributes (module: homeassistant.components.recorder.models.state_attributes)
homeassistant.components.recorder.table_managers.recorder_runs (module: homeassistant.components.recorder.table_managers.recorder_runs)
test_async_get_platforms_loads_loop_if_already_in_sys_modules (module: tests.test_loader)
test_async_handle_source_entity_changes_source_entity_removed_custom_handler (module: tests.helpers.test_helper_integration)
test_attributes_remote_code_number (module: tests.components.mqtt.test_alarm_control_panel)
test_default_address_config_entries_removed_linux (module: tests.components.bluetooth.test_init)
test_formation_strategy_restore_manual_backup_invalid_upload (module: tests.components.zha.test_config_flow)
test_template_with_trigger_templated_auto_off (module: tests.components.template.test_binary_sensor)
NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION (module: pyric.net.wireless.nl80211_h)
_assert_extract_from_target_command_result (module: tests.components.websocket_api.test_commands)
-----
found 16 completions