UNPKG

react-openqasm-editor

Version:

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

72 lines (65 loc) 2.75 kB
import * as monaco from "monaco-editor-core" export default <monaco.languages.CompletionItemProvider>{ provideCompletionItems: (model, position) => { // 获取当前单词的范围 const word = model.getWordUntilPosition(position); const range = { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: word.startColumn, endColumn: word.endColumn }; const suggestions: monaco.languages.CompletionItem[] = [ { label: 'OPENQASM 2.0;', kind: monaco.languages.CompletionItemKind.Snippet, insertText: 'OPENQASM 2.0;', detail: 'OpenQASM版本声明', range: range }, { label: 'include', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'include "${1:filename}";', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: '引入文件', range: range }, { label: 'qreg', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'qreg ${1:name}[${2:size}];', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: '声明量子寄存器', range: range }, { label: 'creg', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'creg ${1:name}[${2:size}];', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: '声明经典寄存器', range: range } ]; // 添加量子门操作补全 const gates = [ { label: 'h', detail: 'Hadamard门' }, { label: 'x', detail: 'Pauli-X门' }, { label: 'cx', insertText: 'cx ${1:control}, ${2:target};', detail: 'CNOT门' }, // 添加更多量子门... ]; for (const gate of gates) { const suggestion: monaco.languages.CompletionItem = { label: gate.label, kind: monaco.languages.CompletionItemKind.Function, detail: gate.detail, range: range, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: gate.insertText || gate.label + ' ${1:qubit};' }; suggestions.push(suggestion); } return { suggestions: suggestions }; } }