text: #ifndef INTERLINCK_CORE_SYNTAX_SYNTAXTOKENDATA_H
  #define INTERLINCK_CORE_SYNTAX_SYNTAXTOKENDATA_H
  
  #include <vector>
  #include "interlinck/Core/Syntax/SyntaxKinds.hpp"
  #include "interlinck/Core/Types.hpp"
  #include "Core/Syntax/SyntaxFlags.hpp"
  
  namespace interlinck::Core::AST
  {
  
  class ISyntaxTree;
  
  } // end namespace interlinck::Core::AST
  
  namespace interlinck::Core::Errors
  {
  
  class IDiagnostic;
  
  } // end namespace interlinck::Core::Errors
  
  namespace interlinck::Core::Syntax
  {
  
  class ISyntaxNode;
  class ISyntaxTrivia;
  class ISyntaxTriviaList;
  
  struct SyntaxTokenData final
  {
      explicit SyntaxTokenData(SyntaxKind syntaxKind,
                               il_string_view text,
                               il_size position,
                               il_size fullWidth,
                               const ISyntaxTriviaList* leadingTrivia,
                               const ISyntaxTriviaList* trailingTrivia,
                               const ISyntaxNode* parent,
                               const ISyntaxTrivia* trivia,
                               const AST::ISyntaxTree* syntaxTree = nullptr) noexcept
          : text{text},
            position{position},
            fullWidth{fullWidth},
            parent{parent},
            trivia{trivia},
            leadingTrivia{leadingTrivia},
            trailingTrivia{trailingTrivia},
            syntaxTree{syntaxTree},
            syntaxKind{syntaxKind}
      {}
  
      std::vector<const Core::Errors::IDiagnostic*> diagnostics{};
      il_string_view text;
      il_size position;
      il_size fullWidth;
      const ISyntaxNode* parent;
      const ISyntaxTrivia* trivia;
      const ISyntaxTriviaList* leadingTrivia;
      const ISyntaxTriviaList* trailingTrivia;
      const AST::ISyntaxTree* syntaxTree;
      SyntaxKind syntaxKind;
      SyntaxFlags flags{SyntaxFlags::None};
  };
  
  } // end namespace interlinck::Core::Syntax
  
  #endif // INTERLINCK_CORE_SYNTAX_SYNTAXTOKENDATA_H
  