示例#1
0
        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);
        }