private void UpdateCurrentParameter() { if (SubjectBuffer != null && TextView != null) { IREditorDocument document = REditorDocument.TryFromTextBuffer(SubjectBuffer); if (document != null) { SnapshotPoint?p = REditorDocument.MapCaretPositionFromView(TextView); if (p.HasValue) { document.EditorTree.InvokeWhenReady((o) => { if (TextView != null) { // Session is still active p = REditorDocument.MapCaretPositionFromView(TextView); if (p.HasValue) { ComputeCurrentParameter(document.EditorTree.AstRoot, p.Value.Position); } } }, null, this.GetType()); } else { SignatureHelp.DismissSession(TextView); } } } }
private void OnCaretPositionChanged(object sender, CaretPositionChangedEventArgs e) { if (TextView != null) { if (SignatureHelper.IsSameSignatureContext(TextView, SubjectBuffer)) { UpdateCurrentParameter(); } else { SignatureHelp.DismissSession(TextView, retrigger: true); } } else { e.TextView.Caret.PositionChanged -= OnCaretPositionChanged; } }
protected virtual void OnSubjectBufferChanged(object sender, TextContentChangedEventArgs e) { if (Session != null && e.Changes.Count > 0) { int start, oldLength, newLength; TextUtility.CombineChanges(e, out start, out oldLength, out newLength); int position = start + newLength; if (position < _initialPosition) { SignatureHelp.DismissSession(TextView); } else { UpdateCurrentParameter(); } } }
private void UpdateCurrentParameter() { if (SubjectBuffer != null && TextView != null) { IREditorDocument document = REditorDocument.TryFromTextBuffer(SubjectBuffer); if (document != null) { SnapshotPoint?p = REditorDocument.MapCaretPositionFromView(TextView); if (p.HasValue) { document.EditorTree.EnsureTreeReady(); ComputeCurrentParameter(document.EditorTree.AstRoot, p.Value.Position); } else { SignatureHelp.DismissSession(TextView); } } } }