Ejemplo n.º 1
0
        public PythonSignature(VsProjectAnalyzer analyzer, ITrackingSpan span, AP.Signature overload, int paramIndex, string lastKeywordArg = null) {
            _span = span;
            _overload = overload;
            if (lastKeywordArg != null) {
                paramIndex = Int32.MaxValue;
            }

            var content = new StringBuilder(overload.name);
            var ppContent = new StringBuilder(overload.name);
            content.Append('(');
            ppContent.AppendLine("(");
            int start = content.Length, ppStart = ppContent.Length;
            var parameters = new IParameter[overload.parameters.Length];
            for (int i = 0; i < overload.parameters.Length; i++) {
                ppContent.Append("    ");
                ppStart = ppContent.Length;
                
                var param = overload.parameters[i];
                if (param.optional) {
                    content.Append('[');
                    ppContent.Append('[');
                }
                if (i > 0) {
                    content.Append(", ");
                    start = content.Length;
                }

                content.Append(param.name);
                ppContent.Append(param.name);
                if (!string.IsNullOrEmpty(param.type) && param.type != "object") {
                    content.Append(": ");
                    content.Append(param.type);
                    ppContent.Append(": ");
                    ppContent.Append(param.type);
                }
                
                if (!String.IsNullOrWhiteSpace(param.defaultValue)) {
                    content.Append(" = ");
                    content.Append(param.defaultValue);
                    ppContent.Append(" = ");
                    ppContent.Append(param.defaultValue);
                }

                var paramSpan = new Span(start, content.Length - start);
                var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart);

                if (param.optional) {
                    content.Append(']');
                    ppContent.Append(']');
                }

                ppContent.AppendLine(",");

                if (lastKeywordArg != null && param.name == lastKeywordArg) {
                    paramIndex = i;
                }

                parameters[i] = new PythonParameter(
                    this, 
                    param, 
                    paramSpan, 
                    ppParamSpan,
                    param.variables != null ? param.variables.Select(analyzer.ToAnalysisVariable).ToArray() : null
                );
            }
            content.Append(')');
            ppContent.Append(')');

            _content = content.ToString();
            _ppContent = ppContent.ToString();
            _documentation = overload.doc.LimitLines(15, stopAtFirstBlankLine: true);

            _parameters = new ReadOnlyCollection<IParameter>(parameters);
            if (lastKeywordArg == null) {
                for (int i = 0; i < parameters.Length; ++i) {
                    if (i == paramIndex || IsParamArray(parameters[i].Name)) {
                        _currentParameter = parameters[i];
                        break;
                    }
                }
            } else if (paramIndex < parameters.Length) {
                _currentParameter = parameters[paramIndex];
            }
        }
Ejemplo n.º 2
0
        public PythonSignature(VsProjectAnalyzer analyzer, ITrackingSpan span, AP.Signature overload, int paramIndex, string lastKeywordArg = null)
        {
            _span     = span;
            _overload = overload;
            if (lastKeywordArg != null)
            {
                paramIndex = Int32.MaxValue;
            }

            var content   = new StringBuilder(overload.name);
            var ppContent = new StringBuilder(overload.name);

            content.Append('(');
            ppContent.AppendLine("(");
            int start = content.Length, ppStart = ppContent.Length;
            var parameters = new IParameter[overload.parameters.Length];

            for (int i = 0; i < overload.parameters.Length; i++)
            {
                ppContent.Append("    ");
                ppStart = ppContent.Length;

                var param = overload.parameters[i];
                if (param.optional)
                {
                    content.Append('[');
                    ppContent.Append('[');
                }
                if (i > 0)
                {
                    content.Append(", ");
                    start = content.Length;
                }

                content.Append(param.name);
                ppContent.Append(param.name);
                if (!string.IsNullOrEmpty(param.type) && param.type != "object")
                {
                    content.Append(": ");
                    content.Append(param.type);
                    ppContent.Append(": ");
                    ppContent.Append(param.type);
                }

                if (!String.IsNullOrWhiteSpace(param.defaultValue))
                {
                    content.Append(" = ");
                    content.Append(param.defaultValue);
                    ppContent.Append(" = ");
                    ppContent.Append(param.defaultValue);
                }

                var paramSpan   = new Span(start, content.Length - start);
                var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart);

                if (param.optional)
                {
                    content.Append(']');
                    ppContent.Append(']');
                }

                ppContent.AppendLine(",");

                if (lastKeywordArg != null && param.name == lastKeywordArg)
                {
                    paramIndex = i;
                }

                parameters[i] = new PythonParameter(
                    this,
                    param,
                    paramSpan,
                    ppParamSpan,
                    param.variables != null ? param.variables.Select(analyzer.ToAnalysisVariable).ToArray() : null
                    );
            }
            content.Append(')');
            ppContent.Append(')');

            _content       = content.ToString();
            _ppContent     = ppContent.ToString();
            _documentation = overload.doc.LimitLines(15, stopAtFirstBlankLine: true);

            _parameters = new ReadOnlyCollection <IParameter>(parameters);
            if (lastKeywordArg == null)
            {
                for (int i = 0; i < parameters.Length; ++i)
                {
                    if (i == paramIndex || IsParamArray(parameters[i].Name))
                    {
                        _currentParameter = parameters[i];
                        break;
                    }
                }
            }
            else if (paramIndex < parameters.Length)
            {
                _currentParameter = parameters[paramIndex];
            }
        }