UNPKG

react-openqasm-editor

Version:

A powerful, customizable code editor for OpenQASM (Open Quantum Assembly Language) based on Monaco Editor.

51 lines (42 loc) 2.36 kB
import * as monaco from "monaco-editor-core" // import { WorkerAccessor } from "../types" export default class HoverProvider implements monaco.languages.HoverProvider { // constructor(private worker: WorkerAccessor) { } constructor() { } async provideHover(model: monaco.editor.ITextModel, position: monaco.Position): Promise<monaco.languages.Hover | null> { const word = model.getWordAtPosition(position); if (!word) return null; const hoverInfo = this.getHoverInfo(word.word); if (!hoverInfo) return null; return { contents: [ { value: hoverInfo } ], range: { startLineNumber: position.lineNumber, startColumn: word.startColumn, endLineNumber: position.lineNumber, endColumn: word.endColumn } }; } private getHoverInfo(word: string): string | null { const hoverMap: { [key: string]: string } = { // 量子门 'h': '**Hadamard门 (H Gate)**\n\n将量子比特置于叠加态。将|0⟩转换为|+⟩,将|1⟩转换为|-⟩。', 'x': '**Pauli-X门**\n\n量子比特的"非"门,将|0⟩转换为|1⟩,将|1⟩转换为|0⟩。', 'y': '**Pauli-Y门**\n\n在布洛赫球上绕y轴旋转π弧度。', 'z': '**Pauli-Z门**\n\n在布洛赫球上绕z轴旋转π弧度。', 'cx': '**CNOT门 (Controlled-X)**\n\n双量子比特门,如果控制位为|1⟩,则对目标位执行X门操作。', 'ccx': '**Toffoli门 (CCNOT)**\n\n三量子比特门,如果两个控制位都为|1⟩,则对目标位执行X门操作。', // 关键字 'OPENQASM': '**OpenQASM**\n\n量子汇编语言版本声明。', 'include': '**Include指令**\n\n包含其他量子程序文件。', 'qreg': '**量子寄存器声明**\n\n声明一个量子比特寄存器。', 'creg': '**经典寄存器声明**\n\n声明一个经典比特寄存器。', 'measure': '**测量操作**\n\n对量子比特进行测量,并将结果存储在经典寄存器中。', 'barrier': '**屏障指令**\n\n防止编译器对指定的量子比特进行优化重排。' }; return hoverMap[word] || null; } }