in src/Parsing/Impl/Ast/Parameter.cs [87:173]
public PythonVariable GetVariable(PythonAst ast)
=> ast.TryGetAttribute(this, NodeAttributes.Variable, out var reference) ? (PythonVariable)reference : null;
public void AddPreceedingWhiteSpace(PythonAst ast, string whiteSpace)
=> ast.SetAttribute(this, NodeAttributes.PreceedingWhiteSpace, whiteSpace);
internal override void AppendCodeString(StringBuilder res, PythonAst ast, CodeFormattingOptions format)
=> AppendCodeString(res, ast, format, null);
internal virtual void AppendParameterName(StringBuilder res, PythonAst ast, CodeFormattingOptions format, string leadingWhiteSpace)
=> NameExpression?.AppendCodeString(res, ast, format, leadingWhiteSpace);
internal override void AppendCodeString(StringBuilder res, PythonAst ast, CodeFormattingOptions format, string leadingWhiteSpace) {
var kwOnlyText = this.GetExtraVerbatimText(ast);
if (kwOnlyText != null) {
if (leadingWhiteSpace != null) {
res.Append(leadingWhiteSpace);
res.Append(kwOnlyText.TrimStart());
leadingWhiteSpace = null;
} else {
res.Append(kwOnlyText);
}
}
var writeName = true;
switch (Kind) {
case ParameterKind.Dictionary:
res.Append(leadingWhiteSpace ?? this.GetPreceedingWhiteSpaceDefaultNull(ast) ?? string.Empty);
leadingWhiteSpace = null;
res.Append("**");
break;
case ParameterKind.List:
res.Append(leadingWhiteSpace ?? this.GetPreceedingWhiteSpaceDefaultNull(ast) ?? string.Empty);
leadingWhiteSpace = null;
res.Append('*');
break;
case ParameterKind.PositionalOnly:
case ParameterKind.Normal:
if (this.IsAltForm(ast)) {
res.Append(leadingWhiteSpace ?? this.GetPreceedingWhiteSpaceDefaultNull(ast) ?? string.Empty);
leadingWhiteSpace = null;
res.Append('(');
AppendParameterName(res, ast, format, leadingWhiteSpace);
if (!this.IsMissingCloseGrouping(ast)) {
res.Append(this.GetSecondWhiteSpace(ast));
res.Append(')');
}
writeName = false;
}
break;
case ParameterKind.KeywordOnly:
break;
case ParameterKind.PositionalOnlyMarker:
res.Append(leadingWhiteSpace ?? this.GetPreceedingWhiteSpaceDefaultNull(ast) ?? string.Empty);
leadingWhiteSpace = null;
res.Append('/');
break;
default: throw new InvalidOperationException();
}
if (writeName) {
AppendParameterName(res, ast, format, leadingWhiteSpace);
}
if (Annotation != null) {
res.Append(this.GetThirdWhiteSpaceDefaultNull(ast) ?? "");
res.Append(':');
Annotation.AppendCodeString(res, ast, format);
}
if (DefaultValue != null) {
format.Append(
res,
format.SpaceAroundDefaultValueEquals,
" ",
string.Empty,
NodeAttributes.GetWhiteSpace(this, ast, WhitespacePrecedingAssign)
);
res.Append('=');
if (format.SpaceAroundDefaultValueEquals != null) {
DefaultValue.AppendCodeString(res, ast, format, format.SpaceAroundDefaultValueEquals.Value ? " " : string.Empty);
} else {
DefaultValue.AppendCodeString(res, ast, format);
}
}
}