示例#1
0
        public async Task <object> GetColorizedDescriptionAsync(INavigationToken token, CancellationToken cancellationToken)
        {
            if (token == null)
            {
                return(null);
            }
            cancellationToken.ThrowIfCancellationRequested();

            var typeName = token.Type.GetName();
            var document = token.Document;
            var snapshot = document.CurrentSnapshot;

            var builder = new ClassifiedTextBuilder();

            if (token.Type == RadAsmTokenType.Instruction)
            {
                builder
                .AddClassifiedText($"({typeName} ")
                .AddClassifiedText(RadAsmTokenType.Instruction, Path.GetFileNameWithoutExtension(document.Path))
                .AddClassifiedText(") ");
            }
            else
            {
                builder.AddClassifiedText($"({typeName}) ");
            }

            builder.AddClassifiedText(token);
            if (token.Type == RadAsmTokenType.FunctionName)
            {
                cancellationToken.ThrowIfCancellationRequested();
                var analysisResult = await document.DocumentAnalysis.GetAnalysisResultAsync(snapshot);

                var block = analysisResult.GetBlock(token.GetEnd());

                cancellationToken.ThrowIfCancellationRequested();

                if (block is FunctionBlock functionBlock)
                {
                    for (var i = 0; i < functionBlock.Parameters.Count; i++)
                    {
                        builder.AddClassifiedText(" ")
                        .AddClassifiedText(_navigationTokenService.CreateToken(functionBlock.Parameters[i], document));
                        if (i != functionBlock.Parameters.Count - 1)
                        {
                            builder.AddClassifiedText(",");
                        }
                    }
                }
            }
            else if (token.Type == RadAsmTokenType.GlobalVariable || token.Type == RadAsmTokenType.LocalVariable)
            {
                var variableToken = (VariableToken)token.Definition;
                if (variableToken.DefaultValue != default)
                {
                    var defaultValueText = variableToken.DefaultValue.GetText(snapshot);
                    builder.AddClassifiedText(" = ")
                    .AddClassifiedText(RadAsmTokenType.Number, defaultValueText);
                }
            }

            cancellationToken.ThrowIfCancellationRequested();

            builder.SetAsElement();
            if (token.Definition is IDefinitionToken definitionToken)
            {
                var description = definitionToken.GetDescription(_documentFactoryLazy.Value);
                if (description != null)
                {
                    builder.AddClassifiedText(description).SetAsElement();
                }
            }
            return(builder.Build());
        }