From 6aa6658ef992311f760c5d8e8570ed834fb857d6 Mon Sep 17 00:00:00 2001 From: Kevin Hill Date: Wed, 5 Jun 2024 14:41:26 -0700 Subject: [PATCH] removing keywords array. matching on words in brackets --- .../CodeMirrorPluginKlipperDocsTooltips.ts | 170 +++++------------- 1 file changed, 42 insertions(+), 128 deletions(-) diff --git a/src/plugins/CodeMirrorPluginKlipperDocsTooltips.ts b/src/plugins/CodeMirrorPluginKlipperDocsTooltips.ts index f0aa443d7..ca125bcbe 100644 --- a/src/plugins/CodeMirrorPluginKlipperDocsTooltips.ts +++ b/src/plugins/CodeMirrorPluginKlipperDocsTooltips.ts @@ -1,144 +1,58 @@ -/** - * @link https://codemirror.net/examples/tooltip/ - */ import { hoverTooltip } from '@codemirror/view' const DOCUMENTATION_URL_BASE = 'https://www.klipper3d.org/Config_Reference.html' -const CONFIG_SECTIONS: readonly string[] = [ - 'ad5206', - 'adc_scaled', - 'adc_temperature', - 'adxl345', - 'angle', - 'axis_twist_compensation', - 'bed_mesh', - 'bed_screws', - 'bed_tilt', - 'bltouch', - 'board_pins', - 'controller_fan', - 'delayed_gcode', - 'display', - 'display_data', - 'display_glyph', - 'display_template', - 'dotstar', - 'dual_carriage', - 'duplicate_pin_override', - 'endstop_phase', - 'exclude_object', - 'extruder', - 'extruder1', - 'extruder_stepper', - 'fan', - 'fan_generic', - 'filament_motion_sensor', - 'filament_switch_sensor', - 'firmware_retraction', - 'force_move', - 'gcode_arcs', - 'gcode_button', - 'gcode_macro', - 'hall_filament_width_sensor', - 'heater_bed', - 'heater_fan', - 'heater_generic', - 'homing_heaters', - 'homing_override', - 'idle_timeout', - 'include', - 'input_shaper', - 'led', - 'lis2dw', - 'manual_stepper', - 'mcp4018', - 'mcp4451', - 'mcp4728', - 'mcu', - 'menu', - 'mpu9250', - 'multi_pin', - 'neopixel', - 'output_pin', - 'palette2', - 'pause_resume', - 'pca9533', - 'pca9632', - 'printer', - 'probe', - 'probe_eddy_current', - 'pwm_cycle_time', - 'pwm_tool', - 'quad_gantry_level', - 'replicape', - 'resonance_tester', - 'respond', - 'safe_z_home', - 'samd_sercom', - 'save_variables', - 'screws_tilt_adjust', - 'sdcard_loop', - 'servo', - 'skew_correction', - 'smart_effector', - 'static_digital_output', - 'stepper', - 'stepper_x', - 'stepper_y', - 'stepper_z', - 'stepper_z1', - 'sx1509', - 'temperature_fan', - 'temperature_sensor', - 'thermistor', - 'tmc2130', - 'tmc2208', - 'tmc2209', - 'tmc2240', - 'tmc2660', - 'tmc5160', - 'tsl1401cl_filament_width_sensor', - 'verify_heater', - 'virtual_sdcard', - 'z_thermal_adjust', - 'z_tilt', -] - +/** + * @link https://codemirror.net/examples/tooltip/ + */ export function KlipperDocsTooltipPlugin() { - return hoverTooltip((view, pos, side) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + return hoverTooltip((view, pos, _side) => { const { from, to, text } = view.state.doc.lineAt(pos) let start = pos, end = pos - while (start > from && /\w/.test(text[start - from - 1])) start-- - while (end < to && /\w/.test(text[end - from])) end++ - const word = text.slice(start - from, end - from) - if ((start === pos && side < 0) || (end === pos && side > 0) || !CONFIG_SECTIONS.includes(word)) { + while (start > from && text[start - from - 1] !== '[') start-- + while (end < to && text[end - from] !== ']') end++ + + if (text[start - from - 1] !== '[' || text[end - from] !== ']') { return null } - return { - pos: start, - end, - above: true, - create() { - const div = document.createElement('div') - - Object.assign(div.style, { - padding: '3px 10px', - borderRadius: '5px', - backgroundColor: '#FFF', - }) - - div.innerHTML = `\ - - View documentation for [${word}] - ` - - return { dom: div } - }, + const content = text.slice(start - from, end - from).trim() + const words = content.split(/\s+/) + + for (const word of words) { + const wordStart = text.indexOf(word, start - from) + from + const wordEnd = wordStart + word.length + + if (pos >= wordStart && pos <= wordEnd) { + return { + pos: wordStart, + end: wordEnd, + above: true, + create() { + const div = document.createElement('div') + + Object.assign(div.style, { + padding: '3px 10px', + borderRadius: '5px', + color: "#000", + backgroundColor: '#FFF', + }) + + div.innerHTML = `\ + View + ${word} + documentation` + + return { dom: div } + }, + } + } } + + return null }) }