本文整理汇总了C#中J.Tools.Parsing.Ast.JAst.SetAttribute方法的典型用法代码示例。如果您正苦于以下问题:C# JAst.SetAttribute方法的具体用法?C# JAst.SetAttribute怎么用?C# JAst.SetAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类J.Tools.Parsing.Ast.JAst
的用法示例。
在下文中一共展示了JAst.SetAttribute方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CloneSubset
/// <summary>
/// Returns a new SuiteStatement which is composed of a subset of the statements in this suite statement.
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public SuiteStatement CloneSubset(JAst ast, int start, int end)
{
Statement[] statements = new Statement[end - start + 1];
for (int i = start; i <= end; i++) {
statements[i - start] = Statements[i];
}
var res = new SuiteStatement(statements);
// propagate white space so we stay mostly the same...
var itemWhiteSpace = this.GetListWhiteSpace(ast);
var colonWhiteSpace = this.GetProceedingWhiteSpaceDefaultNull(ast);
if (colonWhiteSpace != null) {
ast.SetAttribute(res, NodeAttributes.PreceedingWhiteSpace, "");
} else if (itemWhiteSpace != null) {
// semi-colon list of statements, must end in a new line, but the original new line
// could be multiple lines.
ast.SetAttribute(res, NodeAttributes.ListWhiteSpace, new string[0]);
var trailingNewLine = this.GetTrailingNewLine(ast);
if (trailingNewLine != null) {
ast.SetAttribute(res, NodeAttributes.TrailingNewLine, "\r\n");
}
}
if (this.IsAltForm(ast)) {
ast.SetAttribute(res, NodeAttributes.IsAltFormValue, NodeAttributes.IsAltFormValue);
}
return res;
}
示例2: RemoveImport
/// <summary>
/// Returns a new FromImport statement that is identical to this one but has
/// removed the specified import statement. Otherwise preserves any attributes
/// for the statement.
///
/// New in 1.1.
/// <param name="ast">The parent AST whose attributes should be updated for the new node.</param>
/// <param name="index">The index in Names of the import to be removed.</param>
/// </summary>
public FromImportStatement RemoveImport(JAst ast, int index)
{
if (index < 0 || index >= _names.Length) {
throw new ArgumentOutOfRangeException("index");
}
if (ast == null) {
throw new ArgumentNullException("ast");
}
NameExpression[] names = new NameExpression[_names.Length - 1];
NameExpression[] asNames = _asNames == null ? null : new NameExpression[_asNames.Length - 1];
var asNameWhiteSpace = this.GetNamesWhiteSpace(ast);
List<string> newAsNameWhiteSpace = new List<string>();
int asIndex = 0;
for (int i = 0, write = 0; i < _names.Length; i++) {
bool includingCurrentName = i != index;
// track the white space, this needs to be kept in sync w/ ToCodeString and how the
// parser creates the white space.
if (asNameWhiteSpace != null && asIndex < asNameWhiteSpace.Length) {
if (write > 0) {
if (includingCurrentName) {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
} else {
asIndex++;
}
} else if (i > 0) {
asIndex++;
}
}
if (asNameWhiteSpace != null && asIndex < asNameWhiteSpace.Length) {
if (includingCurrentName) {
if (newAsNameWhiteSpace.Count == 0) {
// no matter what we want the 1st entry to have the whitespace after the import keyword
newAsNameWhiteSpace.Add(asNameWhiteSpace[0]);
asIndex++;
} else {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
}
} else {
asIndex++;
}
}
if (includingCurrentName) {
names[write] = _names[i];
if (_asNames != null) {
asNames[write] = _asNames[i];
}
write++;
}
if (AsNames != null && AsNames[i] != null) {
if (asNameWhiteSpace != null && asIndex < asNameWhiteSpace.Length) {
if (i != index) {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
} else {
asIndex++;
}
}
if (_asNames[i].Name.Length != 0) {
if (asNameWhiteSpace != null && asIndex < asNameWhiteSpace.Length) {
if (i != index) {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
} else {
asIndex++;
}
}
} else {
asIndex++;
}
}
}
if (asNameWhiteSpace != null && asIndex < asNameWhiteSpace.Length) {
// trailing comma
newAsNameWhiteSpace.Add(asNameWhiteSpace[asNameWhiteSpace.Length - 1]);
}
var res = new FromImportStatement(_root, names, asNames, IsFromFuture, ForceAbsolute);
ast.CopyAttributes(this, res);
ast.SetAttribute(res, NodeAttributes.NamesWhiteSpace, newAsNameWhiteSpace.ToArray());
return res;
}
示例3: CopyTrailingNewLine
public static void CopyTrailingNewLine(JAst parentNode, Node fromNode, Node toNode)
{
parentNode.SetAttribute(toNode, NodeAttributes.TrailingNewLine, fromNode.GetTrailingNewLine(parentNode));
}
示例4: CopyLeadingWhiteSpace
public static void CopyLeadingWhiteSpace(JAst parentNode, Node fromNode, Node toNode)
{
parentNode.SetAttribute(toNode, NodeAttributes.PreceedingWhiteSpace, fromNode.GetLeadingWhiteSpace(parentNode));
}
示例5: RoundTripHasNoParenthesis
/// <summary>
/// Marks this tuple expression as having no parenthesis for the purposes of round tripping.
/// </summary>
public void RoundTripHasNoParenthesis(JAst ast)
{
ast.SetAttribute(this, NodeAttributes.IsAltFormValue, NodeAttributes.IsAltFormValue);
}
示例6: CreateAst
private JAst CreateAst(Statement ret)
{
var ast = new JAst(ret, _tokenizer.GetLineLocations());
ast.PrivatePrefix = _privatePrefix;
if (_token.Token != null) {
ast.SetLoc(0, GetEnd());
}
if (_verbatim) {
AddExtraVerbatimText(ast, _lookaheadWhiteSpace);
}
foreach (var keyValue in _attributes) {
foreach (var nodeAttr in keyValue.Value) {
ast.SetAttribute(keyValue.Key, nodeAttr.Key, nodeAttr.Value);
}
}
JNameBinder.BindAst(_langVersion, ast, _errors, _bindReferences);
return ast;
}
示例7: AddPreceedingWhiteSpace
public void AddPreceedingWhiteSpace(JAst ast, string whiteSpace)
{
ast.SetAttribute(this, NodeAttributes.PreceedingWhiteSpace, whiteSpace);
}
示例8: AddVariableReference
public static void AddVariableReference(this Node node, JAst ast, bool bindNames, object reference)
{
if (bindNames) {
ast.SetAttribute(node, VariableReference, reference);
}
}
示例9: AddVariable
public static void AddVariable(this Parameter node, JAst ast, bool bindNames, JVariable variable)
{
if (bindNames) {
ast.SetAttribute(node, Variable, variable);
}
}
示例10: RoundTripRemoveValueWhiteSpace
public void RoundTripRemoveValueWhiteSpace(JAst ast)
{
ast.SetAttribute(this, NodeAttributes.IsAltFormValue, NodeAttributes.IsAltFormValue);
}
示例11: RemoveImport
/// <summary>
/// Removes the import at the specified index (which must be in the range of
/// the Names property) and returns a new ImportStatement which is the same
/// as this one minus the imported name. Preserves all round-tripping metadata
/// in the process.
///
/// New in 1.1.
/// </summary>
public ImportStatement RemoveImport(JAst ast, int index)
{
if (index < 0 || index >= _names.Length) {
throw new ArgumentOutOfRangeException("index");
}
if (ast == null) {
throw new ArgumentNullException("ast");
}
ModuleName[] names = new ModuleName[_names.Length - 1];
NameExpression[] asNames = _asNames == null ? null : new NameExpression[_asNames.Length - 1];
var asNameWhiteSpace = this.GetNamesWhiteSpace(ast);
var itemWhiteSpace = this.GetListWhiteSpace(ast);
List<string> newAsNameWhiteSpace = new List<string>();
List<string> newListWhiteSpace = new List<string>();
int asIndex = 0;
for (int i = 0, write = 0; i < _names.Length; i++) {
bool includingCurrentName = i != index;
// track the white space, this needs to be kept in sync w/ ToCodeString and how the
// parser creates the white space.
if (i > 0 && itemWhiteSpace != null) {
if (includingCurrentName) {
newListWhiteSpace.Add(itemWhiteSpace[i - 1]);
}
}
if (includingCurrentName) {
names[write] = _names[i];
if (_asNames != null) {
asNames[write] = _asNames[i];
}
write++;
}
if (AsNames[i] != null && includingCurrentName) {
if (asNameWhiteSpace != null) {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
}
if (_asNames[i].Name.Length != 0) {
if (asNameWhiteSpace != null) {
newAsNameWhiteSpace.Add(asNameWhiteSpace[asIndex++]);
}
}
}
}
var res = new ImportStatement(names, asNames, _forceAbsolute);
ast.CopyAttributes(this, res);
ast.SetAttribute(res, NodeAttributes.NamesWhiteSpace, newAsNameWhiteSpace.ToArray());
ast.SetAttribute(res, NodeAttributes.ListWhiteSpace, newListWhiteSpace.ToArray());
return res;
}