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
text/typescript
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;
}
}