Skip to content

Commit 5661303

Browse files
Merge remote-tracking branch 'origin/src' into completions
2 parents 5cfaf7c + 93043a7 commit 5661303

File tree

4 files changed

+70
-39
lines changed

4 files changed

+70
-39
lines changed

wasm-demo/src/lib.rs

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
#![cfg(target_arch = "wasm32")]
22
#![allow(non_snake_case)]
33

4-
use ra_ide_api::{Analysis, CompletionItemKind, FileId, FilePosition, LineCol, Severity};
4+
use ra_ide_api::{
5+
Analysis, CompletionItemKind, FileId, FilePosition, InsertTextFormat, LineCol, Severity,
6+
};
57
use ra_syntax::{SyntaxKind, TextRange};
68
use wasm_bindgen::prelude::*;
79

10+
mod conv;
11+
use conv::*;
812
mod return_types;
913
use return_types::*;
1014

@@ -89,40 +93,33 @@ impl WorldState {
8993
}
9094

9195
pub fn completions(&self, line_number: u32, column: u32) -> JsValue {
92-
let pos = self.file_pos(line_number, column);
9396
log::warn!("completions");
97+
let line_index = self.analysis.file_line_index(self.file_id).unwrap();
98+
let pos = Position { line_number, column }.conv_with((&line_index, self.file_id));
99+
94100
let res = match self.analysis.completions(pos).unwrap() {
95101
Some(items) => items,
96102
None => return JsValue::NULL,
97103
};
98104

105+
log::warn!("{:#?}", res);
106+
99107
let items: Vec<_> = res
100108
.into_iter()
101109
.map(|item| CompletionItem {
102-
kind: match item.kind() {
103-
Some(CompletionItemKind::Snippet) => 25,
104-
Some(CompletionItemKind::Keyword) => 17,
105-
Some(CompletionItemKind::Module) => 8,
106-
Some(CompletionItemKind::Function) => 1,
107-
Some(CompletionItemKind::BuiltinType) => 6,
108-
Some(CompletionItemKind::Struct) => 6,
109-
Some(CompletionItemKind::Enum) => 15,
110-
Some(CompletionItemKind::EnumVariant) => 16,
111-
Some(CompletionItemKind::Binding) => 4,
112-
Some(CompletionItemKind::Field) => 3,
113-
Some(CompletionItemKind::Static) => 13,
114-
Some(CompletionItemKind::Const) => 14,
115-
Some(CompletionItemKind::Trait) => 7,
116-
Some(CompletionItemKind::TypeAlias) => 6,
117-
Some(CompletionItemKind::Method) => 0,
118-
Some(CompletionItemKind::TypeParam) => 24,
119-
Some(CompletionItemKind::Macro) => 0,
120-
_ => 25,
121-
},
110+
kind: item.kind().unwrap_or(CompletionItemKind::Struct).conv(),
122111
label: item.label().to_string(),
123112
range: self.range(item.source_range()),
124113
detail: item.detail().map(|it| it.to_string()),
125114
insertText: item.text_edit().as_atoms()[0].insert.clone(),
115+
insertTextRules: match item.insert_text_format() {
116+
InsertTextFormat::PlainText => CompletionItemInsertTextRule::None,
117+
InsertTextFormat::Snippet => CompletionItemInsertTextRule::InsertAsSnippet,
118+
},
119+
documentation: item
120+
.documentation()
121+
.map(|doc| MarkdownString { value: doc.as_str().to_string() }),
122+
filterText: item.lookup().to_string(),
126123
})
127124
.collect();
128125
serde_wasm_bindgen::to_value(&items).unwrap()

wasm-demo/www/index.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ import 'monaco-editor/esm/vs/editor/standalone/browser/toggleHighContrast/toggle
4949
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
5050
import * as rustConf from 'monaco-editor/esm/vs/basic-languages/rust/rust';
5151
import exampleCode from './example-code';
52+
import encoding from 'text-encoding';
53+
54+
if (typeof TextEncoder === "undefined") {
55+
// Edge polyfill, https://rustwasm.github.io/docs/wasm-bindgen/reference/browser-support.html
56+
self.TextEncoder = encoding.TextEncoder
57+
self.TextDecoder = encoding.TextDecoder
58+
}
5259

5360
import './index.css';
5461

@@ -93,8 +100,8 @@ monaco.languages.onLanguage(modeId, async () => {
93100
});
94101
monaco.languages.registerCodeLensProvider(modeId, {
95102
provideCodeLenses(m) {
96-
const lenses = state.code_lenses();
97-
return lenses.map(({ range, command }) => {
103+
const code_lenses = state.code_lenses();
104+
const lenses = code_lenses.map(({ range, command }) => {
98105
const position = {
99106
column: range.startColumn,
100107
lineNumber: range.startLineNumber,
@@ -114,6 +121,8 @@ monaco.languages.onLanguage(modeId, async () => {
114121
}
115122
};
116123
});
124+
125+
return { lenses, dispose() { } };
117126
},
118127
});
119128
monaco.languages.registerReferenceProvider(modeId, {

wasm-demo/www/package-lock.json

Lines changed: 38 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wasm-demo/www/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"author": "rust-analyzer developers",
1010
"license": "(MIT OR Apache-2.0)",
1111
"dependencies": {
12-
"monaco-editor": "^0.16.2",
12+
"monaco-editor": "^0.18.1",
13+
"text-encoding": "^0.7.0",
1314
"wasm_demo": "file:../pkg"
1415
},
1516
"devDependencies": {

0 commit comments

Comments
 (0)