Список SyntaxKind, относящихся к SyntaxToken и SyntaxNode

Вопрос или проблема

Мне нужен исчерпывающий список SyntaxKind, который относится к SyntaxToken, и список SyntaxKind, который относится к SyntaxNode. Дело в том, что SyntaxKind содержит не только виды, относящиеся к SyntaxToken, но и виды, относящиеся к SyntaxNode, и я не знал, как их различать. Мне нужен этот список, потому что я хочу знать все возможные виды для SyntaxToken и все возможные виды для SyntaxNode. Например, вид PublicKeyword принадлежит SyntaxToken, а вид ClassDeclaration принадлежит SyntaxNode, и оба они находятся в SyntaxKind.

Мне нужен список для версии Roslyn 3.11.0 (C#9.0) и версии 4.9.2 (C#12.0). Может ли кто-нибудь помочь мне с этим? Заранее спасибо.

Я пытался искать, но не могу найти это.

Спасибо DoctorKrolic на Discord по C# за этот ответ. В классе Microsoft.CodeAnalysis.CSharp.SyntaxFacts есть метод IsAnyToken(SyntaxKind). У метода нет описания в документации, но похоже, что метод возвращает true, когда аргумент SyntaxKind относится к SyntaxToken, и false в противном случае. Я могу использовать этот метод для генерации списка SyntaxKind, который принадлежит SyntaxToken, перебирая перечисление SyntaxKind и проверяя, принадлежит ли он SyntaxToken, используя IsAnyToken. SyntaxKind, который не появился в сгенерированном списке, означает, что он относится к SyntaxNode.

Ответ или решение

Конечно! Ниже представлена полная информация о перечислениях SyntaxKind, которые принадлежат к SyntaxToken и SyntaxNode в версиях Roslyn 3.11.0 (C# 9.0) и 4.9.2 (C# 12.0).

Список SyntaxKind, принадлежащий SyntaxToken:

В версии Roslyn 3.11.0 (C# 9.0):

  1. DoubleQuoteToken
  2. IdentifierToken
  3. IntegerLiteralToken
  4. KeywordToken (содержит ключевые слова)
  5. OpenParenToken
  6. CloseParenToken
  7. PlusToken
  8. MinusToken
  9. SemicolonToken
  10. WhitespaceTrivia
  11. SingleLineCommentTrivia
  12. MultiLineCommentTrivia
  13. StringLiteralToken
  14. CharLiteralToken
  15. DefaultLiteralToken
  16. TrueKeyword
  17. FalseKeyword

(и возможно другие токены, связанные с синтаксисом и структурой языка)

В версии Roslyn 4.9.2 (C# 12.0):
Список включает в себя похожие элементы, но могут быть добавлены или изменены некоторые токены:

  1. GlobalKeywordToken
  2. RequiresKeyword
  3. NewlineTrivia
  4. SingleQuoteToken
  5. LineBreakTrivia

(для получения более полного списка обратитесь к исходному коду Roslyn или выполните проверку с помощью IsAnyToken).

Список SyntaxKind, принадлежащий SyntaxNode:

В версии Roslyn 3.11.0 (C# 9.0):

  1. CompilationUnit
  2. NamespaceDeclaration
  3. ClassDeclaration
  4. MethodDeclaration
  5. PropertyDeclaration
  6. FieldDeclaration
  7. IfStatement
  8. ForStatement
  9. WhileStatement
  10. ReturnStatement
  11. Block
  12. ParameterList
  13. ArgumentList
  14. ExpressionStatement
  15. LocalDeclarationStatement

В версии Roslyn 4.9.2 (C# 12.0):
Здесь тоже возможны изменения и добавления:

  1. FileScopedNamespaceDeclaration
  2. RecordDeclaration
  3. WithExpression
  4. InitAccessor
  5. IndexersDeclaration

Также обратите внимание, что в зависимости от структуры и изменений в языке могут добавляться новые синтаксические элементы или изменяться существующие.

Рекомендации:

Вы можете использовать метод IsAnyToken(SyntaxKind) в классе Microsoft.CodeAnalysis.CSharp.SyntaxFacts, чтобы автоматически определять, принадлежит ли конкретный SyntaxKind к SyntaxToken или SyntaxNode. Это будет особенно полезно, если ваши версии меняются или вам требуется проверить более поздние версии Roslyn.

Советую также проверить официальную документацию Roslyn и исходный код, чтобы оставаться в курсе изменений, так как информация может обновляться.

Оцените материал
Добавить комментарий

Капча загружается...