diff options
-rw-r--r-- | crates/ra_assists/src/add_missing_impl_members.rs | 96 | ||||
-rw-r--r-- | crates/ra_assists/src/ast_editor.rs | 41 | ||||
-rw-r--r-- | editors/code/package-lock.json | 81 | ||||
-rw-r--r-- | editors/code/package.json | 2 |
4 files changed, 129 insertions, 91 deletions
diff --git a/crates/ra_assists/src/add_missing_impl_members.rs b/crates/ra_assists/src/add_missing_impl_members.rs index 0e49b0401..0c903a563 100644 --- a/crates/ra_assists/src/add_missing_impl_members.rs +++ b/crates/ra_assists/src/add_missing_impl_members.rs | |||
@@ -2,9 +2,10 @@ use crate::{Assist, AssistId, AssistCtx, ast_editor::{AstEditor, AstBuilder}}; | |||
2 | 2 | ||
3 | use hir::{HasSource, db::HirDatabase}; | 3 | use hir::{HasSource, db::HirDatabase}; |
4 | use ra_syntax::{SmolStr, TreeArc}; | 4 | use ra_syntax::{SmolStr, TreeArc}; |
5 | use ra_syntax::ast::{self, AstNode, FnDef, ImplItem, ImplItemKind, NameOwner}; | 5 | use ra_syntax::ast::{self, AstNode, ImplItem, ImplItemKind, NameOwner}; |
6 | use ra_db::FilePosition; | 6 | use ra_db::FilePosition; |
7 | 7 | ||
8 | #[derive(PartialEq)] | ||
8 | enum AddMissingImplMembersMode { | 9 | enum AddMissingImplMembersMode { |
9 | DefaultMethodsOnly, | 10 | DefaultMethodsOnly, |
10 | NoDefaultMethods, | 11 | NoDefaultMethods, |
@@ -45,39 +46,50 @@ fn add_missing_impl_members_inner( | |||
45 | resolve_target_trait_def(ctx.db, &analyzer, impl_node)? | 46 | resolve_target_trait_def(ctx.db, &analyzer, impl_node)? |
46 | }; | 47 | }; |
47 | 48 | ||
48 | let missing_fns: Vec<_> = { | 49 | let def_name = |kind| -> Option<&SmolStr> { |
49 | let fn_def_opt = |kind| if let ImplItemKind::FnDef(def) = kind { Some(def) } else { None }; | 50 | match kind { |
50 | let def_name = |def| -> Option<&SmolStr> { FnDef::name(def).map(ast::Name::text) }; | 51 | ImplItemKind::FnDef(def) => def.name(), |
51 | 52 | ImplItemKind::TypeAliasDef(def) => def.name(), | |
52 | let trait_items = | 53 | ImplItemKind::ConstDef(def) => def.name(), |
53 | trait_def.syntax().descendants().find_map(ast::ItemList::cast)?.impl_items(); | 54 | } |
54 | let impl_items = impl_item_list.impl_items(); | 55 | .map(ast::Name::text) |
55 | |||
56 | let trait_fns = trait_items.map(ImplItem::kind).filter_map(fn_def_opt); | ||
57 | let impl_fns = impl_items.map(ImplItem::kind).filter_map(fn_def_opt).collect::<Vec<_>>(); | ||
58 | |||
59 | trait_fns | ||
60 | .filter(|t| def_name(t).is_some()) | ||
61 | .filter(|t| match mode { | ||
62 | AddMissingImplMembersMode::DefaultMethodsOnly => t.body().is_some(), | ||
63 | AddMissingImplMembersMode::NoDefaultMethods => t.body().is_none(), | ||
64 | }) | ||
65 | .filter(|t| impl_fns.iter().all(|i| def_name(i) != def_name(t))) | ||
66 | .collect() | ||
67 | }; | 56 | }; |
68 | if missing_fns.is_empty() { | 57 | |
58 | let trait_items = trait_def.item_list()?.impl_items(); | ||
59 | let impl_items = impl_item_list.impl_items().collect::<Vec<_>>(); | ||
60 | |||
61 | let missing_items: Vec<_> = trait_items | ||
62 | .filter(|t| def_name(t.kind()).is_some()) | ||
63 | .filter(|t| match t.kind() { | ||
64 | ImplItemKind::FnDef(def) => match mode { | ||
65 | AddMissingImplMembersMode::DefaultMethodsOnly => def.body().is_some(), | ||
66 | AddMissingImplMembersMode::NoDefaultMethods => def.body().is_none(), | ||
67 | }, | ||
68 | _ => mode == AddMissingImplMembersMode::NoDefaultMethods, | ||
69 | }) | ||
70 | .filter(|t| impl_items.iter().all(|i| def_name(i.kind()) != def_name(t.kind()))) | ||
71 | .collect(); | ||
72 | if missing_items.is_empty() { | ||
69 | return None; | 73 | return None; |
70 | } | 74 | } |
71 | 75 | ||
72 | ctx.add_action(AssistId(assist_id), label, |edit| { | 76 | ctx.add_action(AssistId(assist_id), label, |edit| { |
73 | let n_existing_items = impl_item_list.impl_items().count(); | 77 | let n_existing_items = impl_item_list.impl_items().count(); |
74 | let fns = missing_fns.into_iter().map(add_body_and_strip_docstring).collect::<Vec<_>>(); | ||
75 | |||
76 | let mut ast_editor = AstEditor::new(impl_item_list); | 78 | let mut ast_editor = AstEditor::new(impl_item_list); |
77 | if n_existing_items == 0 { | 79 | if n_existing_items == 0 { |
78 | ast_editor.make_multiline(); | 80 | ast_editor.make_multiline(); |
79 | } | 81 | } |
80 | ast_editor.append_functions(fns.iter().map(|it| &**it)); | 82 | |
83 | for item in missing_items { | ||
84 | let it = match item.kind() { | ||
85 | ImplItemKind::FnDef(def) => { | ||
86 | strip_docstring(ImplItem::cast(add_body(def).syntax()).unwrap()) | ||
87 | } | ||
88 | _ => strip_docstring(item), | ||
89 | }; | ||
90 | ast_editor.append_item(&it) | ||
91 | } | ||
92 | |||
81 | let first_new_item = ast_editor.ast().impl_items().nth(n_existing_items).unwrap(); | 93 | let first_new_item = ast_editor.ast().impl_items().nth(n_existing_items).unwrap(); |
82 | let cursor_poisition = first_new_item.syntax().range().start(); | 94 | let cursor_poisition = first_new_item.syntax().range().start(); |
83 | ast_editor.into_text_edit(edit.text_edit_builder()); | 95 | ast_editor.into_text_edit(edit.text_edit_builder()); |
@@ -88,14 +100,19 @@ fn add_missing_impl_members_inner( | |||
88 | ctx.build() | 100 | ctx.build() |
89 | } | 101 | } |
90 | 102 | ||
91 | fn add_body_and_strip_docstring(fn_def: &ast::FnDef) -> TreeArc<ast::FnDef> { | 103 | fn strip_docstring(item: &ast::ImplItem) -> TreeArc<ast::ImplItem> { |
104 | let mut ast_editor = AstEditor::new(item); | ||
105 | ast_editor.strip_attrs_and_docs(); | ||
106 | ast_editor.ast().to_owned() | ||
107 | } | ||
108 | |||
109 | fn add_body(fn_def: &ast::FnDef) -> TreeArc<ast::FnDef> { | ||
92 | let mut ast_editor = AstEditor::new(fn_def); | 110 | let mut ast_editor = AstEditor::new(fn_def); |
93 | if fn_def.body().is_none() { | 111 | if fn_def.body().is_none() { |
94 | ast_editor.set_body(&AstBuilder::<ast::Block>::single_expr( | 112 | ast_editor.set_body(&AstBuilder::<ast::Block>::single_expr( |
95 | &AstBuilder::<ast::Expr>::unimplemented(), | 113 | &AstBuilder::<ast::Expr>::unimplemented(), |
96 | )); | 114 | )); |
97 | } | 115 | } |
98 | ast_editor.strip_attrs_and_docs(); | ||
99 | ast_editor.ast().to_owned() | 116 | ast_editor.ast().to_owned() |
100 | } | 117 | } |
101 | 118 | ||
@@ -126,6 +143,10 @@ mod tests { | |||
126 | add_missing_impl_members, | 143 | add_missing_impl_members, |
127 | " | 144 | " |
128 | trait Foo { | 145 | trait Foo { |
146 | type Output; | ||
147 | |||
148 | const CONST: usize = 42; | ||
149 | |||
129 | fn foo(&self); | 150 | fn foo(&self); |
130 | fn bar(&self); | 151 | fn bar(&self); |
131 | fn baz(&self); | 152 | fn baz(&self); |
@@ -139,6 +160,10 @@ impl Foo for S { | |||
139 | }", | 160 | }", |
140 | " | 161 | " |
141 | trait Foo { | 162 | trait Foo { |
163 | type Output; | ||
164 | |||
165 | const CONST: usize = 42; | ||
166 | |||
142 | fn foo(&self); | 167 | fn foo(&self); |
143 | fn bar(&self); | 168 | fn bar(&self); |
144 | fn baz(&self); | 169 | fn baz(&self); |
@@ -148,7 +173,9 @@ struct S; | |||
148 | 173 | ||
149 | impl Foo for S { | 174 | impl Foo for S { |
150 | fn bar(&self) {} | 175 | fn bar(&self) {} |
151 | <|>fn foo(&self) { unimplemented!() } | 176 | <|>type Output; |
177 | const CONST: usize = 42; | ||
178 | fn foo(&self) { unimplemented!() } | ||
152 | fn baz(&self) { unimplemented!() } | 179 | fn baz(&self) { unimplemented!() } |
153 | 180 | ||
154 | }", | 181 | }", |
@@ -256,6 +283,8 @@ impl Foo for S { <|> }", | |||
256 | #[doc(alias = "test alias")] | 283 | #[doc(alias = "test alias")] |
257 | trait Foo { | 284 | trait Foo { |
258 | /// doc string | 285 | /// doc string |
286 | type Output; | ||
287 | |||
259 | #[must_use] | 288 | #[must_use] |
260 | fn foo(&self); | 289 | fn foo(&self); |
261 | } | 290 | } |
@@ -265,12 +294,15 @@ impl Foo for S {}<|>"#, | |||
265 | #[doc(alias = "test alias")] | 294 | #[doc(alias = "test alias")] |
266 | trait Foo { | 295 | trait Foo { |
267 | /// doc string | 296 | /// doc string |
297 | type Output; | ||
298 | |||
268 | #[must_use] | 299 | #[must_use] |
269 | fn foo(&self); | 300 | fn foo(&self); |
270 | } | 301 | } |
271 | struct S; | 302 | struct S; |
272 | impl Foo for S { | 303 | impl Foo for S { |
273 | <|>fn foo(&self) { unimplemented!() } | 304 | <|>type Output; |
305 | fn foo(&self) { unimplemented!() } | ||
274 | }"#, | 306 | }"#, |
275 | ) | 307 | ) |
276 | } | 308 | } |
@@ -281,6 +313,10 @@ impl Foo for S { | |||
281 | add_missing_default_members, | 313 | add_missing_default_members, |
282 | " | 314 | " |
283 | trait Foo { | 315 | trait Foo { |
316 | type Output; | ||
317 | |||
318 | const CONST: usize = 42; | ||
319 | |||
284 | fn valid(some: u32) -> bool { false } | 320 | fn valid(some: u32) -> bool { false } |
285 | fn foo(some: u32) -> bool; | 321 | fn foo(some: u32) -> bool; |
286 | } | 322 | } |
@@ -288,6 +324,10 @@ struct S; | |||
288 | impl Foo for S { <|> }", | 324 | impl Foo for S { <|> }", |
289 | " | 325 | " |
290 | trait Foo { | 326 | trait Foo { |
327 | type Output; | ||
328 | |||
329 | const CONST: usize = 42; | ||
330 | |||
291 | fn valid(some: u32) -> bool { false } | 331 | fn valid(some: u32) -> bool { false } |
292 | fn foo(some: u32) -> bool; | 332 | fn foo(some: u32) -> bool; |
293 | } | 333 | } |
diff --git a/crates/ra_assists/src/ast_editor.rs b/crates/ra_assists/src/ast_editor.rs index de0529b32..5f8ba3df6 100644 --- a/crates/ra_assists/src/ast_editor.rs +++ b/crates/ra_assists/src/ast_editor.rs | |||
@@ -163,11 +163,7 @@ impl AstEditor<ast::ItemList> { | |||
163 | self.do_make_multiline() | 163 | self.do_make_multiline() |
164 | } | 164 | } |
165 | 165 | ||
166 | pub fn append_functions<'a>(&mut self, fns: impl Iterator<Item = &'a ast::FnDef>) { | 166 | pub fn append_item(&mut self, item: &ast::ImplItem) { |
167 | fns.for_each(|it| self.append_function(it)) | ||
168 | } | ||
169 | |||
170 | pub fn append_function(&mut self, fn_def: &ast::FnDef) { | ||
171 | let (indent, position) = match self.ast().impl_items().last() { | 167 | let (indent, position) = match self.ast().impl_items().last() { |
172 | Some(it) => ( | 168 | Some(it) => ( |
173 | leading_indent(it.syntax()).unwrap_or("").to_string(), | 169 | leading_indent(it.syntax()).unwrap_or("").to_string(), |
@@ -182,8 +178,7 @@ impl AstEditor<ast::ItemList> { | |||
182 | }, | 178 | }, |
183 | }; | 179 | }; |
184 | let ws = tokens::WsBuilder::new(&format!("\n{}", indent)); | 180 | let ws = tokens::WsBuilder::new(&format!("\n{}", indent)); |
185 | let to_insert: ArrayVec<[SyntaxElement; 2]> = | 181 | let to_insert: ArrayVec<[SyntaxElement; 2]> = [ws.ws().into(), item.syntax().into()].into(); |
186 | [ws.ws().into(), fn_def.syntax().into()].into(); | ||
187 | self.ast = self.insert_children(position, to_insert.into_iter()); | 182 | self.ast = self.insert_children(position, to_insert.into_iter()); |
188 | } | 183 | } |
189 | 184 | ||
@@ -192,6 +187,23 @@ impl AstEditor<ast::ItemList> { | |||
192 | } | 187 | } |
193 | } | 188 | } |
194 | 189 | ||
190 | impl AstEditor<ast::ImplItem> { | ||
191 | pub fn strip_attrs_and_docs(&mut self) { | ||
192 | while let Some(start) = self | ||
193 | .ast() | ||
194 | .syntax() | ||
195 | .children_with_tokens() | ||
196 | .find(|it| it.kind() == ATTR || it.kind() == COMMENT) | ||
197 | { | ||
198 | let end = match start.next_sibling_or_token() { | ||
199 | Some(el) if el.kind() == WHITESPACE => el, | ||
200 | Some(_) | None => start, | ||
201 | }; | ||
202 | self.ast = self.replace_children(RangeInclusive::new(start, end), iter::empty()); | ||
203 | } | ||
204 | } | ||
205 | } | ||
206 | |||
195 | impl AstEditor<ast::FnDef> { | 207 | impl AstEditor<ast::FnDef> { |
196 | pub fn set_body(&mut self, body: &ast::Block) { | 208 | pub fn set_body(&mut self, body: &ast::Block) { |
197 | let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new(); | 209 | let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new(); |
@@ -210,21 +222,6 @@ impl AstEditor<ast::FnDef> { | |||
210 | let replace_range = RangeInclusive::new(old_body_or_semi, old_body_or_semi); | 222 | let replace_range = RangeInclusive::new(old_body_or_semi, old_body_or_semi); |
211 | self.ast = self.replace_children(replace_range, to_insert.into_iter()) | 223 | self.ast = self.replace_children(replace_range, to_insert.into_iter()) |
212 | } | 224 | } |
213 | |||
214 | pub fn strip_attrs_and_docs(&mut self) { | ||
215 | while let Some(start) = self | ||
216 | .ast() | ||
217 | .syntax() | ||
218 | .children_with_tokens() | ||
219 | .find(|it| it.kind() == ATTR || it.kind() == COMMENT) | ||
220 | { | ||
221 | let end = match start.next_sibling_or_token() { | ||
222 | Some(el) if el.kind() == WHITESPACE => el, | ||
223 | Some(_) | None => start, | ||
224 | }; | ||
225 | self.ast = self.replace_children(RangeInclusive::new(start, end), iter::empty()); | ||
226 | } | ||
227 | } | ||
228 | } | 225 | } |
229 | 226 | ||
230 | pub struct AstBuilder<N: AstNode> { | 227 | pub struct AstBuilder<N: AstNode> { |
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 6b3a12f91..b3666f30b 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json | |||
@@ -39,7 +39,8 @@ | |||
39 | "@types/seedrandom": { | 39 | "@types/seedrandom": { |
40 | "version": "2.4.28", | 40 | "version": "2.4.28", |
41 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.28.tgz", | 41 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.28.tgz", |
42 | "integrity": "sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA==" | 42 | "integrity": "sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA==", |
43 | "dev": true | ||
43 | }, | 44 | }, |
44 | "agent-base": { | 45 | "agent-base": { |
45 | "version": "4.2.1", | 46 | "version": "4.2.1", |
@@ -113,6 +114,18 @@ | |||
113 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", | 114 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", |
114 | "dev": true | 115 | "dev": true |
115 | }, | 116 | }, |
117 | "azure-devops-node-api": { | ||
118 | "version": "7.2.0", | ||
119 | "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz", | ||
120 | "integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==", | ||
121 | "dev": true, | ||
122 | "requires": { | ||
123 | "os": "0.1.1", | ||
124 | "tunnel": "0.0.4", | ||
125 | "typed-rest-client": "1.2.0", | ||
126 | "underscore": "1.8.3" | ||
127 | } | ||
128 | }, | ||
116 | "balanced-match": { | 129 | "balanced-match": { |
117 | "version": "1.0.0", | 130 | "version": "1.0.0", |
118 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", | 131 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", |
@@ -289,6 +302,12 @@ | |||
289 | "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", | 302 | "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", |
290 | "dev": true | 303 | "dev": true |
291 | }, | 304 | }, |
305 | "didyoumean": { | ||
306 | "version": "1.2.1", | ||
307 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", | ||
308 | "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", | ||
309 | "dev": true | ||
310 | }, | ||
292 | "diff": { | 311 | "diff": { |
293 | "version": "3.5.0", | 312 | "version": "3.5.0", |
294 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", | 313 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", |
@@ -805,6 +824,12 @@ | |||
805 | "wrappy": "1" | 824 | "wrappy": "1" |
806 | } | 825 | } |
807 | }, | 826 | }, |
827 | "os": { | ||
828 | "version": "0.1.1", | ||
829 | "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", | ||
830 | "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=", | ||
831 | "dev": true | ||
832 | }, | ||
808 | "os-homedir": { | 833 | "os-homedir": { |
809 | "version": "1.0.2", | 834 | "version": "1.0.2", |
810 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", | 835 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", |
@@ -887,12 +912,6 @@ | |||
887 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", | 912 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", |
888 | "dev": true | 913 | "dev": true |
889 | }, | 914 | }, |
890 | "q": { | ||
891 | "version": "1.5.1", | ||
892 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", | ||
893 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", | ||
894 | "dev": true | ||
895 | }, | ||
896 | "qs": { | 915 | "qs": { |
897 | "version": "6.5.2", | 916 | "version": "6.5.2", |
898 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | 917 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", |
@@ -915,9 +934,9 @@ | |||
915 | } | 934 | } |
916 | }, | 935 | }, |
917 | "readable-stream": { | 936 | "readable-stream": { |
918 | "version": "3.3.0", | 937 | "version": "3.4.0", |
919 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", | 938 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", |
920 | "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", | 939 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", |
921 | "dev": true, | 940 | "dev": true, |
922 | "requires": { | 941 | "requires": { |
923 | "inherits": "^2.0.3", | 942 | "inherits": "^2.0.3", |
@@ -1177,21 +1196,13 @@ | |||
1177 | "dev": true | 1196 | "dev": true |
1178 | }, | 1197 | }, |
1179 | "typed-rest-client": { | 1198 | "typed-rest-client": { |
1180 | "version": "0.9.0", | 1199 | "version": "1.2.0", |
1181 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", | 1200 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz", |
1182 | "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=", | 1201 | "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==", |
1183 | "dev": true, | 1202 | "dev": true, |
1184 | "requires": { | 1203 | "requires": { |
1185 | "tunnel": "0.0.4", | 1204 | "tunnel": "0.0.4", |
1186 | "underscore": "1.8.3" | 1205 | "underscore": "1.8.3" |
1187 | }, | ||
1188 | "dependencies": { | ||
1189 | "underscore": { | ||
1190 | "version": "1.8.3", | ||
1191 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", | ||
1192 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", | ||
1193 | "dev": true | ||
1194 | } | ||
1195 | } | 1206 | } |
1196 | }, | 1207 | }, |
1197 | "typescript": { | 1208 | "typescript": { |
@@ -1207,9 +1218,9 @@ | |||
1207 | "dev": true | 1218 | "dev": true |
1208 | }, | 1219 | }, |
1209 | "underscore": { | 1220 | "underscore": { |
1210 | "version": "1.9.1", | 1221 | "version": "1.8.3", |
1211 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", | 1222 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", |
1212 | "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", | 1223 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", |
1213 | "dev": true | 1224 | "dev": true |
1214 | }, | 1225 | }, |
1215 | "uri-js": { | 1226 | "uri-js": { |
@@ -1261,15 +1272,17 @@ | |||
1261 | } | 1272 | } |
1262 | }, | 1273 | }, |
1263 | "vsce": { | 1274 | "vsce": { |
1264 | "version": "1.59.0", | 1275 | "version": "1.64.0", |
1265 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.59.0.tgz", | 1276 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.64.0.tgz", |
1266 | "integrity": "sha512-tkB97885k5ce25Brbe9AZTCAXAkBh7oa5EOzY0BCJQ51W/mfRaQuCluCd9gZpWdgiU4AbPvwxtoVKKsenlSt8w==", | 1277 | "integrity": "sha512-t3R7QTe2nAXQZs2kD+nA8GjdlX8pAQlnzxaNTG2976i5cyQ8r+ZsMNa/f9PDt7bhjcQM+u/fL+LkNuw+hwoy2A==", |
1267 | "dev": true, | 1278 | "dev": true, |
1268 | "requires": { | 1279 | "requires": { |
1280 | "azure-devops-node-api": "^7.2.0", | ||
1269 | "chalk": "^2.4.2", | 1281 | "chalk": "^2.4.2", |
1270 | "cheerio": "^1.0.0-rc.1", | 1282 | "cheerio": "^1.0.0-rc.1", |
1271 | "commander": "^2.8.1", | 1283 | "commander": "^2.8.1", |
1272 | "denodeify": "^1.2.1", | 1284 | "denodeify": "^1.2.1", |
1285 | "didyoumean": "^1.2.1", | ||
1273 | "glob": "^7.0.6", | 1286 | "glob": "^7.0.6", |
1274 | "lodash": "^4.17.10", | 1287 | "lodash": "^4.17.10", |
1275 | "markdown-it": "^8.3.1", | 1288 | "markdown-it": "^8.3.1", |
@@ -1280,8 +1293,8 @@ | |||
1280 | "read": "^1.0.7", | 1293 | "read": "^1.0.7", |
1281 | "semver": "^5.1.0", | 1294 | "semver": "^5.1.0", |
1282 | "tmp": "0.0.29", | 1295 | "tmp": "0.0.29", |
1296 | "typed-rest-client": "1.2.0", | ||
1283 | "url-join": "^1.1.0", | 1297 | "url-join": "^1.1.0", |
1284 | "vso-node-api": "6.1.2-preview", | ||
1285 | "yauzl": "^2.3.1", | 1298 | "yauzl": "^2.3.1", |
1286 | "yazl": "^2.2.2" | 1299 | "yazl": "^2.2.2" |
1287 | } | 1300 | } |
@@ -1339,18 +1352,6 @@ | |||
1339 | "https-proxy-agent": "^2.2.1" | 1352 | "https-proxy-agent": "^2.2.1" |
1340 | } | 1353 | } |
1341 | }, | 1354 | }, |
1342 | "vso-node-api": { | ||
1343 | "version": "6.1.2-preview", | ||
1344 | "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", | ||
1345 | "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", | ||
1346 | "dev": true, | ||
1347 | "requires": { | ||
1348 | "q": "^1.0.1", | ||
1349 | "tunnel": "0.0.4", | ||
1350 | "typed-rest-client": "^0.9.0", | ||
1351 | "underscore": "^1.8.3" | ||
1352 | } | ||
1353 | }, | ||
1354 | "wrappy": { | 1355 | "wrappy": { |
1355 | "version": "1.0.2", | 1356 | "version": "1.0.2", |
1356 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | 1357 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
diff --git a/editors/code/package.json b/editors/code/package.json index 52972031d..052f0b3b3 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -44,7 +44,7 @@ | |||
44 | "tslint": "^5.16.0", | 44 | "tslint": "^5.16.0", |
45 | "tslint-config-prettier": "^1.18.0", | 45 | "tslint-config-prettier": "^1.18.0", |
46 | "typescript": "^3.4.4", | 46 | "typescript": "^3.4.4", |
47 | "vsce": "^1.59.0", | 47 | "vsce": "^1.64.0", |
48 | "vscode": "^1.1.33" | 48 | "vscode": "^1.1.33" |
49 | }, | 49 | }, |
50 | "activationEvents": [ | 50 | "activationEvents": [ |