|
Enhanced C#
Language of your choice: library documentation
|
A class filled with methods for checking whether a node has the correct LNode.Name and structure. For example, IsPropertyDefinition(node) checks whether node meets the requirements for being a property definition, such as having a Name equal to #property, and having name and return value that are complex identifiers.
More...
A class filled with methods for checking whether a node has the correct LNode.Name and structure. For example, IsPropertyDefinition(node) checks whether node meets the requirements for being a property definition, such as having a Name equal to #property, and having name and return value that are complex identifiers.
This class also has useful helper functions, such as KeyNameComponentOf(LNode).
Public Types | |
| enum | Pedantics { Strict = 0, IgnoreAttributesInOddPlaces = 1, IgnoreIllegalParentheses = 2, Lax = IgnoreAttributesInOddPlaces | IgnoreIllegalParentheses } |
| This is needed by the EC# node printer, but perhaps no one else. More... | |
Static Public Member Functions | |
| static Symbol | SpaceDefinitionKind (LNode n, Pedantics p=Pedantics.Lax) |
| Returns the space kind, which is one of the names #struct, #class, #enum, #interface, #namespace, #alias, #trait, or null if the node Name or structure is not valid for a space statement. More... | |
| static Symbol | SpaceDefinitionKind (LNode n, out LNode name, out LNode bases, out LNode body, Pedantics p=Pedantics.Lax) |
| Returns the space kind, which is one of the names #struct, #class, #enum, #interface, #namespace, #alias, #trait, or null if the node Name or structure is not valid for a space statement. More... | |
| static Symbol | MethodDefinitionKind (LNode n, bool allowDelegate, Pedantics p=Pedantics.Lax) |
| If the given node has a valid syntax tree for a method definition, a constructor, or (when orDelegate is true) a delegate definition, gets the definition kind (#fn, #cons, or #delegate). More... | |
| static bool | IsNormalMethod (LNode n, Pedantics p=Pedantics.Lax) |
| Alias for MethodDefinitionKind(LNode,bool,Pedantics) that returns true if MethodDefinitionKind returns #fn. More... | |
| static Symbol | MethodDefinitionKind (LNode n, out LNode retType, out LNode name, out LNode args, out LNode body, bool allowDelegate=true, Pedantics p=Pedantics.Lax) |
| If the given node has a valid syntax tree for a method definition, a constructor, or (when orDelegate is true) a delegate definition, gets the definition kind (#fn, #cons, or #delegate). More... | |
| static bool | IsPropertyDefinition (LNode n, Pedantics p=Pedantics.Lax) |
| Returns true iff the given node has a valid syntax tree for a property definition. More... | |
| static bool | IsPropertyDefinition (LNode n, out LNode retType, out LNode name, out LNode args, out LNode body, out LNode initialValue, Pedantics p=Pedantics.Lax) |
| Returns true iff the given node has a valid syntax tree for a property definition, and gets the component parts of the definition. More... | |
| static bool | IsEventDefinition (LNode n, Pedantics p) |
| static bool | IsVariableDeclExpr (LNode expr, out LNode type, out LNode name, out LNode initialValue, Pedantics p=Pedantics.Lax) |
| Verifies that a declaration of a single variable is valid, and gets its parts. More... | |
| static bool | IsVariableDecl (LNode _n, bool allowMultiple, bool allowNoAssignment, Pedantics p) |
| static bool | IsSimpleIdentifier (LNode n, Pedantics p) |
| static bool | IsComplexIdentifier (LNode n, ICI f=ICI.Default, Pedantics p=Pedantics.Lax) |
| static bool | IsPrintableTypeParam (LNode n, Pedantics p=Pedantics.Lax) |
| Checks if 'n' is a legal type parameter definition. More... | |
| static bool | IsExecutableBlockStmt (LNode _n, Pedantics p=Pedantics.Lax) |
| static Symbol | ExecutableBlockStmtType (LNode _n, Pedantics p=Pedantics.Lax) |
| static bool | IsBracedBlock (LNode n) |
| static bool | IsLabelStmt (LNode _n, Pedantics p=Pedantics.Lax) |
| static bool | IsNamedArgument (LNode _n, Pedantics p=Pedantics.Lax) |
| static bool | IsResultExpr (LNode n, Pedantics p=Pedantics.Lax) |
| static bool | IsForwardedProperty (LNode _n, Pedantics p=Pedantics.Lax) |
| static bool | IsIsTest (LNode n, out LNode subject, out LNode targetType, out LNode targetVarName, out LNode extraArgs, Pedantics p=Pedantics.Lax) |
| Checks whether an expression is a valid "is" test (pattern- matching expression) such as "x is Foo", "x is Foo y" or "x is Foo y(z)". More... | |
| static bool | IsLinqExpression (LNode n, Pedantics p=Pedantics.Lax) |
| static Symbol | KeyNameComponentOf (LNode name) |
Given a complex name such as global::Foo<int>.Bar<T>, this method identifies the base name component, which in this example is Bar. This is used, for example, to identify the expected name for a constructor based on the class name, e.g. Foo<T> => Foo. More... | |
| static bool | IsPlainCsIdentStartChar (char c) |
| static bool | IsPlainCsIdentContChar (char c) |
| static bool | IsIdentStartChar (char c) |
| static bool | IsIdentContChar (char c) |
| static bool | IsPlainCsIdentifier (string text) |
| static bool | IsAssignmentOperator (Symbol opName) |
| static bool | IsOperator (Symbol opName) |
| static string | SanitizeIdentifier (string id) |
| Eliminates punctuation and special characters from a string so that the string can be used as a plain C# identifier, e.g. "I'd" => "I_aposd", "123" => "_123", "+5" => "_plus5". More... | |
|
strong |
This is needed by the EC# node printer, but perhaps no one else.
|
inlinestatic |
Checks whether an expression is a valid "is" test (pattern- matching expression) such as "x is Foo", "x is Foo y" or "x is Foo y(z)".
The format of a valid "is" test is @'is(subject, type_or_vardecl, extraArgsList). For example a is Foo would be @'is(a, Foo) and a is Foo b(c, d) would be @'is(a, #var(Foo, b), #(c, d)). Unary "is" expressions like is Foo are stored as binary expressions with an empty identifier as the left-hand side: @'is(@``, Foo).
References Loyc.Syntax.CodeSymbols.AltList, Loyc.Syntax.LNode.Args, Loyc.Syntax.LNode.CallsMin(), Loyc.Syntax.CodeSymbols.Is, and Loyc.Ecs.EcsValidators.IsVariableDeclExpr().
|
inlinestatic |
Alias for MethodDefinitionKind(LNode,bool,Pedantics) that returns true if MethodDefinitionKind returns #fn.
References Loyc.Ecs.EcsValidators.MethodDefinitionKind().
|
inlinestatic |
Checks if 'n' is a legal type parameter definition.
A type parameter definition must be a simple symbol with at most one #in or #out attribute, and at most one #where attribute with an argument list consisting of complex identifiers.
References Loyc.Syntax.LNode.Attrs, Loyc.Syntax.CodeSymbols.New, Loyc.Syntax.CodeSymbols.Out, and Loyc.Syntax.CodeSymbols.Where.
|
inlinestatic |
Returns true iff the given node has a valid syntax tree for a property definition, and gets the component parts of the definition.
The body may be anything. If it calls CodeSymbols.Braces, it's a normal body, otherwise it's a getter-only body (e.g. int Foo => 42). Indexer properties can have an argument list, e.g. T Foo[int x] { get; } would have a syntax tree like #property(T, Foo, #(#var(#int32, x)), { get; }).
References Loyc.Syntax.CodeSymbols.AltList, Loyc.Syntax.LNode.Args, Loyc.Syntax.CodeSymbols.Missing, and Loyc.Syntax.CodeSymbols.Property.
|
inlinestatic |
Returns true iff the given node has a valid syntax tree for a property definition.
|
inlinestatic |
Verifies that a declaration of a single variable is valid, and gets its parts.
| expr | Potential variable or field declaration |
| type | Variable type (empty identifier if var) |
| name | Variable name (identifier or $substutution expr) |
| initialValue | Initial value that is assigned in expr, or null if unassigned. |
expr is declaration of a single variable.References Loyc.Syntax.LNode.Args, Loyc.Syntax.CodeSymbols.Assign, Loyc.Syntax.LNode.Calls(), and Loyc.Syntax.CodeSymbols.Var.
Referenced by Loyc.Ecs.EcsValidators.IsIsTest().
Given a complex name such as global::Foo<int>.Bar<T>, this method identifies the base name component, which in this example is Bar. This is used, for example, to identify the expected name for a constructor based on the class name, e.g. Foo<T> => Foo.
It is not verified that name is a complex identifier. There is no error detection but in some cases an empty name may be returned, e.g. for input like Foo."Hello".
References Loyc.Syntax.LNode.Args, Loyc.Syntax.LNode.Calls(), Loyc.Syntax.LNode.CallsMin(), Loyc.Syntax.CodeSymbols.ColonColon, Loyc.Syntax.CodeSymbols.Dot, Loyc.Syntax.LNode.Name, Loyc.Syntax.CodeSymbols.Of, and Loyc.Syntax.LNode.Target.
|
inlinestatic |
If the given node has a valid syntax tree for a method definition, a constructor, or (when orDelegate is true) a delegate definition, gets the definition kind (#fn, #cons, or #delegate).
Referenced by Loyc.Ecs.EcsValidators.IsNormalMethod().
|
inlinestatic |
If the given node has a valid syntax tree for a method definition, a constructor, or (when orDelegate is true) a delegate definition, gets the definition kind (#fn, #cons, or #delegate).
| retType | Return type of the method (if it's a constructor, this will be the empty identifier). |
| name | Name of the method. |
| args | args.Args is the argument list of the method. |
| body | The method body, or null if there is no method body. The method body calls CodeSymbols.Braces if the method is a non-lambda-style method. |
Method declarations (no body) also count.
A destructor counts as a #fn with a method name that calls the ~ operator.
References Loyc.Syntax.CodeSymbols._Destruct, Loyc.Syntax.CodeSymbols.AltList, Loyc.Syntax.LNode.Args, Loyc.Syntax.CodeSymbols.Braces, Loyc.Syntax.CodeSymbols.Delegate, Loyc.Syntax.CodeSymbols.Missing, and Loyc.Syntax.LNode.Name.
|
inlinestatic |
Eliminates punctuation and special characters from a string so that the string can be used as a plain C# identifier, e.g. "I'd" => "I_aposd", "123" => "_123", "+5" => "_plus5".
The empty string "" becomes "__empty__", ASCII punctuation becomes "_xyz" where xyz is an HTML entity name, e.g. '!' becomes "_excl", and all other characters become "Xxx" where xx is the hexadecimal representation of the code point. Designed for the Unicode BMP only.
References Loyc.G.BareHtmlEntityNameForAscii().
|
inlinestatic |
Returns the space kind, which is one of the names #struct, #class, #enum, #interface, #namespace, #alias, #trait, or null if the node Name or structure is not valid for a space statement.
| n | The node to examine. |
| name | Name of the space. |
| bases | bases.Args will be the list of base types. |
| body | A braced block of statements holding the contents of the space. |
References Loyc.Syntax.CodeSymbols.Alias, Loyc.Syntax.CodeSymbols.AltList, Loyc.Syntax.LNode.Args, Loyc.Syntax.CodeSymbols.Assign, Loyc.Syntax.CodeSymbols.Braces, Loyc.Syntax.CodeSymbols.Missing, and Loyc.Syntax.LNode.Name.
1.8.17