diff --git a/Nodejs/Product/Nodejs/EditFilter.cs b/Nodejs/Product/Nodejs/EditFilter.cs index d297bec97..7509928c6 100644 --- a/Nodejs/Product/Nodejs/EditFilter.cs +++ b/Nodejs/Product/Nodejs/EditFilter.cs @@ -22,7 +22,6 @@ using Microsoft.NodejsTools.Editor.Core; using Microsoft.NodejsTools.Formatting; using Microsoft.NodejsTools.Intellisense; -using Microsoft.NodejsTools.Outlining; using Microsoft.NodejsTools.Project; using Microsoft.VisualStudio; using Microsoft.VisualStudio.ComponentModelHost; @@ -80,7 +79,6 @@ public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pv // disable JavaScript language services auto formatting features, this is because // they are not aware that we have an extra level of indentation if (pguidCmdGroup == VSConstants.VSStd2K) { - JavaScriptOutliningTaggerProvider.OutliningTagger tagger; switch ((VSConstants.VSStd2KCmdID)nCmdID) { case VSConstants.VSStd2KCmdID.FORMATSELECTION: FormatSelection(); return VSConstants.S_OK; case VSConstants.VSStd2KCmdID.FORMATDOCUMENT: FormatDocument(); return VSConstants.S_OK; @@ -135,20 +133,6 @@ _intellisenseStack.TopSession is ICompletionSession && return VSConstants.S_OK; } break; - case VSConstants.VSStd2KCmdID.OUTLN_STOP_HIDING_ALL: - tagger = _textView.GetOutliningTagger(); - if (tagger != null) { - tagger.Disable(); - } - // let VS get the event as well - break; - case VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING: - tagger = _textView.GetOutliningTagger(); - if (tagger != null) { - tagger.Enable(); - } - // let VS get the event as well - break; } } else if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97) { switch ((VSConstants.VSStd97CmdID)nCmdID) { @@ -679,7 +663,6 @@ public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, Int } } } else if (pguidCmdGroup == VSConstants.VSStd2K) { - JavaScriptOutliningTaggerProvider.OutliningTagger tagger; for (int i = 0; i < cCmds; i++) { switch ((VSConstants.VSStd2KCmdID)prgCmds[i].cmdID) { case VSConstants.VSStd2KCmdID.FORMATDOCUMENT: @@ -697,20 +680,6 @@ public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, Int case VSConstants.VSStd2KCmdID.UNCOMMENTBLOCK: prgCmds[i].cmdf = (uint)(OLECMDF.OLECMDF_ENABLED | OLECMDF.OLECMDF_SUPPORTED); return VSConstants.S_OK; - - case VSConstants.VSStd2KCmdID.OUTLN_STOP_HIDING_ALL: - tagger = _textView.GetOutliningTagger(); - if (tagger != null && tagger.Enabled) { - prgCmds[i].cmdf = (uint)(OLECMDF.OLECMDF_ENABLED | OLECMDF.OLECMDF_SUPPORTED); - } - return VSConstants.S_OK; - - case VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING: - tagger = _textView.GetOutliningTagger(); - if (tagger != null && !tagger.Enabled) { - prgCmds[i].cmdf = (uint)(OLECMDF.OLECMDF_ENABLED | OLECMDF.OLECMDF_SUPPORTED); - } - return VSConstants.S_OK; } } } diff --git a/Nodejs/Product/Nodejs/Nodejs.csproj b/Nodejs/Product/Nodejs/Nodejs.csproj index d70324fef..aca8c6f8e 100644 --- a/Nodejs/Product/Nodejs/Nodejs.csproj +++ b/Nodejs/Product/Nodejs/Nodejs.csproj @@ -336,7 +336,6 @@ SalsaLsIntellisenseOptionsControl.cs - diff --git a/Nodejs/Product/Nodejs/Outlining/JavaScriptOutliningTaggerProvider.cs b/Nodejs/Product/Nodejs/Outlining/JavaScriptOutliningTaggerProvider.cs deleted file mode 100644 index 5085ac600..000000000 --- a/Nodejs/Product/Nodejs/Outlining/JavaScriptOutliningTaggerProvider.cs +++ /dev/null @@ -1,260 +0,0 @@ -//*********************************************************// -// Copyright (c) Microsoft. All rights reserved. -// -// Apache 2.0 License -// -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. -// -//*********************************************************// - -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Diagnostics; -using Microsoft.NodejsTools.Analysis; -using Microsoft.NodejsTools.Intellisense; -using Microsoft.NodejsTools.Parsing; -using Microsoft.VisualStudio.Text; -using Microsoft.VisualStudio.Text.Editor; -using Microsoft.VisualStudio.Text.Tagging; -using Microsoft.VisualStudio.Utilities; -using FunctionObject = Microsoft.NodejsTools.Parsing.FunctionObject; - -namespace Microsoft.NodejsTools.Outlining { - [Export(typeof(ITaggerProvider)), ContentType(NodejsConstants.Nodejs)] - [TagType(typeof(IOutliningRegionTag))] - internal class JavaScriptOutliningTaggerProvider : ITaggerProvider { - public ITagger CreateTagger(ITextBuffer buffer) where T : ITag { - return (ITagger)(buffer.GetOutliningTagger() ?? new OutliningTagger(buffer)); - } - - internal class OutliningTagger : ITagger { - private readonly ITextBuffer _buffer; - private bool _enabled, _eventHooked; - - public OutliningTagger(ITextBuffer buffer) { - _buffer = buffer; - _buffer.Properties[typeof (OutliningTagger)] = this; - - if (NodejsPackage.Instance != null) { - _enabled = NodejsPackage.Instance.AdvancedEditorOptionsPage.EnterOutliningOnOpen; - } - } - - public bool Enabled { - get { return _enabled; } - } - - public void Enable() { - _enabled = true; - OnTagsUpdated(); - } - - public void Disable() { - _enabled = false; - OnTagsUpdated(); - } - - private void OnTagsUpdated() { - var snapshot = _buffer.CurrentSnapshot; - var tagsChanged = TagsChanged; - if (tagsChanged != null) { - tagsChanged(this, new SnapshotSpanEventArgs(new SnapshotSpan(snapshot, new Span(0, snapshot.Length)))); - } - } - - #region ITagger Members - - public IEnumerable> GetTags(NormalizedSnapshotSpanCollection spans) { - IJsProjectEntry entry; - if (_enabled && _buffer.TryGetJsProjectEntry(out entry)) { - if (!_eventHooked) { - entry.NewParseTree += OnNewParseTree; - _eventHooked = true; - } - - JsAst ast; - IAnalysisCookie cookie; - entry.GetTreeAndCookie(out ast, out cookie); - var snapCookie = cookie as SnapshotCookie; - - if (ast != null && - snapCookie != null && - // buffer could have changed if file was closed and reopened - snapCookie.Snapshot.TextBuffer == spans[0].Snapshot.TextBuffer) { - var visitor = new OutliningVisitor(ast, snapCookie.Snapshot); - ast.Walk(visitor); - return visitor.OutliningTagSpans; - } - } - - return new ITagSpan[0]; - } - - private void OnNewParseTree(object sender, EventArgs e) { - IJsProjectEntry entry; - if (_buffer.TryGetJsProjectEntry(out entry)) { - OnTagsUpdated(); - } - } - - public event EventHandler TagsChanged; - - private class OutliningVisitor : AstVisitor { - private readonly JsAst _ast; - private readonly ITextSnapshot _snapshot; - public readonly List> OutliningTagSpans; - - public OutliningVisitor(JsAst ast, ITextSnapshot snapshot) { - _ast = ast; - _snapshot = snapshot; - OutliningTagSpans = new List>(); - } - - public override bool Walk(FunctionObject node) { - // FunctionExpressions contain FunctionObjects. - // Therefore we only need to handle FunctionObjects to handle both. - if (node.Body.Braces != BraceState.StartAndEnd) { - return false; - } - TagSpan span = GetFunctionSpan(_ast, _snapshot, node); - OutliningTagSpans.Add(span); - return base.Walk(node); - } - - private static TagSpan GetFunctionSpan(JsAst ast, ITextSnapshot snapshot, FunctionObject functionObject) { - IndexSpan indexSpan = functionObject.Body.GetSpan(ast.LocationResolver); - return GetTagSpan(snapshot, indexSpan.Start, indexSpan.End, functionObject.ParameterEnd); - } - - private static TagSpan GetTagSpan(ITextSnapshot snapshot, int start, int end, int headerIndex) { - TagSpan tagSpan = null; - try { - int testLen = headerIndex - start + 1; - if (start != -1 && end != -1) { - int length = end - start - testLen; - if (length > 0) { - var span = new Span(start + testLen, length); - - tagSpan = new TagSpan( - new SnapshotSpan(snapshot, span), - new OutliningTag(snapshot, span, true) - ); - } - } - } - catch (ArgumentException) { - // sometimes the parser gives us bad spans, ignore those and fix the parser - Debug.Assert(false, "bad argument when making span/tag"); - } - - return tagSpan; - } - } - - #endregion - } - } - - - class TagSpan : ITagSpan { - private readonly SnapshotSpan _span; - private readonly OutliningTag _tag; - - public TagSpan(SnapshotSpan span, OutliningTag tag) { - _span = span; - _tag = tag; - } - - #region ITagSpan Members - - public SnapshotSpan Span { - get { return _span; } - } - - public IOutliningRegionTag Tag { - get { return _tag; } - } - - #endregion - } - - class OutliningTag : IOutliningRegionTag { - private readonly ITextSnapshot _snapshot; - private readonly Span _span; - private readonly bool _isImplementation; - - public OutliningTag(ITextSnapshot iTextSnapshot, Span span, bool isImplementation) { - _snapshot = iTextSnapshot; - _span = span; - _isImplementation = isImplementation; - } - - #region IOutliningRegionTag Members - - public object CollapsedForm { - get { return "..."; } - } - - public object CollapsedHintForm { - get { - string collapsedHint = _snapshot.GetText(_span); - - string[] lines = collapsedHint.Split(new[] { "\r\n" }, StringSplitOptions.None); - // remove any leading white space for the preview - if (lines.Length > 0) { - int smallestWhiteSpace = Int32.MaxValue; - foreach (string curLine in lines) { - for (int j = 0; j < curLine.Length; j++) { - if (curLine[j] != ' ') { - smallestWhiteSpace = Math.Min(j, smallestWhiteSpace); - break; - } - } - } - - for (int i = 0; i < lines.Length; i++) { - if (lines[i].Length >= smallestWhiteSpace) { - lines[i] = lines[i].Substring(smallestWhiteSpace); - } - } - - return String.Join("\r\n", lines); - } - return collapsedHint; - } - } - - public bool IsDefaultCollapsed { - get { return false; } - } - - public bool IsImplementation { - get { return _isImplementation; } - } - - #endregion - } - - - static class OutliningTaggerProviderExtensions { - public static JavaScriptOutliningTaggerProvider.OutliningTagger GetOutliningTagger(this ITextView self) { - return self.TextBuffer.GetOutliningTagger(); - } - - public static JavaScriptOutliningTaggerProvider.OutliningTagger GetOutliningTagger(this ITextBuffer self) { - JavaScriptOutliningTaggerProvider.OutliningTagger res; - if (self.Properties.TryGetProperty(typeof(JavaScriptOutliningTaggerProvider.OutliningTagger), out res)) { - return res; - } - return null; - } - } -}