private Task UpdateGuidelinesFromCodingConventionAsync(ICodingConventionContext codingConventionContext, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(Task.FromCanceled(cancellationToken)); } if (codingConventionContext.CurrentConventions.TryGetConventionValue("guidelines_style", out string guidelines_style)) { if (TryParseStrokeParametersFromCodingConvention(guidelines_style, out var strokeParameters)) { _isUsingCodingConvention = true; _view.VisualElement.Dispatcher.BeginInvoke(new Action <StrokeParameters>(StrokeParametersChanged), strokeParameters.Freeze()); } } ICollection <int> positions = null; if (codingConventionContext.CurrentConventions.TryGetConventionValue("guidelines", out string guidelines)) { positions = ParseGuidelinePositionsFromCodingConvention(guidelines); } // Also support max_line_length: https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#max_line_length if (codingConventionContext.CurrentConventions.TryGetConventionValue("max_line_length", out string max_line_length) && TryParsePosition(max_line_length, out int maxLineLengthValue)) { (positions ?? (positions = new List <int>())).Add(maxLineLengthValue); } if (positions != null) { // Override 'classic' settings. _isUsingCodingConvention = true; // TODO: await JoinableTaskFactory.SwitchToMainThreadAsync(); _view.VisualElement.Dispatcher.BeginInvoke(new Action <IEnumerable <int> >(PositionsChanged), positions); } if (_isUsingCodingConvention && !s_sentEditorConfigTelemetry) { var eventTelemetry = new EventTelemetry("EditorConfig"); if (!string.IsNullOrEmpty(guidelines)) { eventTelemetry.Properties.Add("Convention", guidelines); } if (!string.IsNullOrEmpty(max_line_length)) { eventTelemetry.Properties.Add(nameof(max_line_length), max_line_length); } if (!string.IsNullOrEmpty(guidelines_style)) { eventTelemetry.Properties.Add(nameof(guidelines_style), guidelines_style); } ColumnGuideAdornmentFactory.AddStrokeParametersAndPositionsToTelemetry(eventTelemetry, _strokeParameters, positions); _telemetry.Client.TrackEvent(eventTelemetry); s_sentEditorConfigTelemetry = true; } return(Task.CompletedTask); }