Files
swift-mirror/include/swift/IDE/SyntaxModel.h
2013-10-22 19:49:29 +00:00

79 lines
1.9 KiB
C++

//===- SyntaxModel.h - Routines for IDE syntax model ---------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_IDE_SYNTAX_MODEL_H
#define SWIFT_IDE_SYNTAX_MODEL_H
#include "swift/Basic/SourceLoc.h"
namespace swift {
class SourceManager;
class TranslationUnit;
namespace ide {
enum class SyntaxNodeKind : uint8_t {
Keyword,
Identifier,
DollarIdent,
Integer,
Floating,
String,
Character,
CommentLine,
CommentBlock,
TypeId
};
struct SyntaxNode {
SyntaxNodeKind Kind;
CharSourceRange Range;
SyntaxNode(SyntaxNodeKind Kind, CharSourceRange Range)
: Kind(Kind), Range(Range) { }
};
class SyntaxModelWalker {
virtual void anchor();
public:
virtual ~SyntaxModelWalker() {}
/// \brief Called when first visiting a syntax node, before walking into its
/// children. If it returns false, the subtree is skipped.
///
virtual bool walkToNodePre(SyntaxNode Node) { return true; }
/// \brief Called after visiting the children of a syntax node. If it returns
/// false, the remaining traversal is terminated and returns failure.
virtual bool walkToNodePost(SyntaxNode Node) { return true; }
};
class SyntaxModelContext {
struct Implementation;
Implementation &Impl;
TranslationUnit &TU;
public:
SyntaxModelContext(SourceManager &SM, unsigned BufferID,
TranslationUnit &TU);
~SyntaxModelContext();
bool walk(SyntaxModelWalker &Walker);
};
} // namespace ide
} // namespace swift
#endif // SWIFT_IDE_SYNTAX_MODEL_H