Inverted CheckRuleFiles condition in SpeechRules::replace_single_char causes unicode-full.yaml to reload when CheckRuleFiles is "None"

Aperta Adatta ai principianti
#996 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
1/5
Tempo stimato
Meno di un'ora
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
rust
Ambito
accessibility

Direzione di ricerca

Leggi src/speech.rs e confronta la condizione CheckRuleFiles in SpeechRules::replace_single_char con i controlli in SpeechRules::update e read_files. Modifica la condizione come descritto nell’issue, poi esegui i test pertinenti per il caricamento dei file di regole e la sostituzione di singoli caratteri. Il lavoro è completato quando "None" ignora i timestamp dei file e "All" continua a rilevare le modifiche ai file.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

In src/speech.rs, SpeechRules::replace_single_char has an inverted equality check when computing should_ignore_file_time:

let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") == "All";

Every other rule loader in src/speech.rs (such as SpeechRules::update and read_files) uses != "All":

let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") != "All";
Impact
  1. When CheckRuleFiles: "None" (recommended for environments where rule files are static or loaded from in-memory archives/zip files):
    • should_ignore_file_time evaluates to false instead of true inside replace_single_char.
    • is_file_up_to_date checks the file's modification timestamp on every character lookup that falls back to unicode-full.yaml (such as Mathematical Italic characters 𝑥, 𝑎, 𝑏, 𝑐 after canonicalization).
    • In environments where rule files are backed by an in-memory filesystem or lack valid modification timestamps (returning UNIX_EPOCH), is_file_up_to_date returns false on every call, causing MathCAT to re-parse the ~6,500-entry unicode-full.yaml file on every single character lookup (~30ms per character on mobile devices, adding 200–480ms of latency per expression or navigation step).
  2. When CheckRuleFiles: "All":
    • should_ignore_file_time evaluates to true, so edits to unicode-full.yaml are ignored instead of being reloaded.
Proposed Fix

In src/speech.rs inside SpeechRules::replace_single_char, change == "All" to != "All":

-        let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") == "All";
+        let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") != "All";
Lingua principale
Rust
Stelle
131
Fork
97
Merge medio
21h 45m
PR unite (30g)
95

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di daisy/MathCAT

Tutte le issue di daisy/MathCAT

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.