5#ifndef QQMLSEMANTICTOKENS_P_H
6#define QQMLSEMANTICTOKENS_P_H
19#include <private/qqmldiffer_p.h>
20#include <QtLanguageServer/private/qlanguageserverspec_p.h>
21#include <QtQmlDom/private/qqmldomitem_p.h>
23#include <QtCore/qlist.h>
24#include <QtCore/qmap.h>
122Q_ENUM_NS(SemanticTokenProtocolTypes)
134 return lhs.loc == rhs.loc && lhs
.kind == rhs
.kind && lhs.modifiers == rhs.modifiers;
146
147
148
161 const QQmlJS::SourceLocation &tokenLocation);
162void addModifier(QLspSpecification::SemanticTokenModifiers modifier,
int *baseModifier);
165 const QList<
unsigned> &);
168 const std::optional<HighlightsRange> &range);
171void applyDiffs(HighlightsContainer &highlights,
const QList<QQmlLSUtils::Diff> &diffs);
173 const QString &lastValidCode,
const QString ¤tCode);
175 const std::optional<HighlightsRange> &range);
182 const std::optional<HighlightsRange> &range);
187 bool visitor(QQmlJS::Dom::Path,
const QQmlJS::Dom::DomItem &item,
bool);
188 void highlightComment(
const QQmlJS::Dom::DomItem &item);
189 void highlightImport(
const QQmlJS::Dom::DomItem &item);
190 void highlightBinding(
const QQmlJS::Dom::DomItem &item);
191 void highlightPragma(
const QQmlJS::Dom::DomItem &item);
192 void highlightEnumItem(
const QQmlJS::Dom::DomItem &item);
193 void highlightEnumDecl(
const QQmlJS::Dom::DomItem &item);
194 void highlightQmlObject(
const QQmlJS::Dom::DomItem &item);
195 void highlightComponent(
const QQmlJS::Dom::DomItem &item);
196 void highlightPropertyDefinition(
const QQmlJS::Dom::DomItem &item);
197 void highlightMethod(
const QQmlJS::Dom::DomItem &item);
198 void highlightScriptLiteral(
const QQmlJS::Dom::DomItem &item);
199 void highlightIdentifier(
const QQmlJS::Dom::DomItem &item);
200 void highlightBySemanticAnalysis(
const QQmlJS::Dom::DomItem &item, QQmlJS::SourceLocation loc);
201 void highlightScriptExpressions(
const QQmlJS::Dom::DomItem &item);
202 void highlightCallExpression(
const QQmlJS::Dom::DomItem &item);
203 void highlightFieldMemberAccess(
const QQmlJS::Dom::DomItem &item, QQmlJS::SourceLocation loc);
207 HighlightsContainer m_highlights;
208 std::optional<HighlightsRange> m_range;
HighlightingVisitor(const QQmlJS::Dom::DomItem &item, const std::optional< HighlightsRange > &range)
const HighlightsContainer & hightights() const
HighlightsContainer & highlights()
Combined button and popup list for selecting options.
void applyDiffs(HighlightsContainer &highlights, const QList< QQmlLSUtils::Diff > &diffs)
HighlightsContainer visitTokens(const QQmlJS::Dom::DomItem &item, const std::optional< HighlightsRange > &range)
void addHighlight(HighlightsContainer &out, const QQmlJS::SourceLocation &loc, QmlHighlightKind, QmlHighlightModifiers=QmlHighlightModifier::None)
void updateResultID(QByteArray &resultID)
QList< QQmlJS::SourceLocation > sourceLocationsFromMultiLineToken(QStringView code, const QQmlJS::SourceLocation &tokenLocation)
Returns multiple source locations for a given raw comment.
void addModifier(QLspSpecification::SemanticTokenModifiers modifier, int *baseModifier)
HighlightsContainer regexFallbackHighlights(QStringView code, const std::optional< HighlightsRange > &range)
QList< QLspSpecification::SemanticTokensEdit > computeDiff(const QList< unsigned > &, const QList< unsigned > &)
HighlightsContainer shiftHighlights(const HighlightsContainer &cachedHighlights, const QString &lastValidCode, const QString ¤tCode)
bool rangeOverlapsWithSourceLocation(const QQmlJS::SourceLocation &loc, const HighlightsRange &r)
QList< unsigned > encodeSemanticTokens(const HighlightsContainer &highlights, HighlightingMode mode=HighlightingMode::Default)
static bool rightFragmentRemains(const QQmlJS::SourceLocation &t, quint32 delStart, quint32 delEnd)
static void shiftTokenAfterInsert(QQmlJS::SourceLocation &t, const QQmlJS::SourceLocation &cursor, int newlines, int lastLen, int diffLen)
static FieldFilter highlightingFilter()
static std::pair< quint32, quint32 > newlineCountAndLastLineLength(const QString &text)
static bool insertionTouchesTokenLeft(const QQmlJS::SourceLocation &token, const QQmlJS::SourceLocation &cursor)
static void applyDeletionOverlap(QQmlJS::SourceLocation &t, quint32 delStart, quint32 delEnd, int newlines, quint32 delStartLine, quint32 delStartColumn)
SemanticTokenProtocolTypes
@ QmlExternalObjectProperty
static void updateCursorPositionByDiff(const QString &text, QQmlJS::SourceLocation &cursor)
static void updateHighlightsOnInsert(HighlightsContainer &highlights, QQmlJS::SourceLocation &cursor, const QQmlLSUtils::Diff &diff)
static std::optional< QmlHighlightKind > resolveJsGlobalObjectKind(const DomItem &item, const QString &name)
Further resolves the type of a JavaScriptIdentifier A global object can be in the object form or in t...
int(*)(QmlHighlightKind) QmlHighlightKindToLspKind
static void expandTokenForLeftOverlap(QQmlJS::SourceLocation &t, const QQmlLSUtils::Diff &diff, const QQmlJS::SourceLocation &cursor, int newlines, int lastLen)
static bool tokenAfterOffset(const QQmlJS::SourceLocation &t, quint32 offset)
static bool insertionInsideToken(const QQmlJS::SourceLocation &token, const QQmlJS::SourceLocation &cursor)
static bool spansAcrossDeletion(const QQmlJS::SourceLocation &t, quint32 delStart, quint32 delEnd)
static std::vector< LineSegment > splitIntoLineSegments(QStringView text, qsizetype start, qsizetype end)
static void shiftTokenAfterDelete(QQmlJS::SourceLocation &t, int newlines, int lastLen, const QQmlJS::SourceLocation &cursor, int diffLen)
static int mapToProtocolForQtCreator(QmlHighlightKind highlightKind)
static void expandTokenForMiddleInsert(QQmlJS::SourceLocation &t, const QQmlLSUtils::Diff &diff, const QQmlJS::SourceLocation &cursor)
static int fromQmlModifierKindToLspTokenType(QmlHighlightModifiers highlightModifier)
static bool tokenBeforeOffset(const QQmlJS::SourceLocation &t, quint32 offset)
static bool leftFragmentRemains(const QQmlJS::SourceLocation &t, quint32 delStart, quint32 delEnd)
static void updateHighlightsOnDelete(HighlightsContainer &highlights, QQmlJS::SourceLocation &cursor, const QQmlLSUtils::Diff &diff)
@ QmlExternalObjectProperty
static int mapToProtocolDefault(QmlHighlightKind highlightKind)
QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQIORing)
HighlightToken(const QQmlJS::SourceLocation &loc, QmlHighlightKind, QmlHighlightModifiers=QmlHighlightModifier::None)
QQmlJS::SourceLocation loc
QmlHighlightModifiers modifiers
friend bool operator==(const HighlightToken &lhs, const HighlightToken &rhs)