aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmljstools/qmljsrefactoringchanges.h
blob: a5b995c0ea1d8ffadb7a0c4b236b4e1a942b2dfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#pragma once

#include "qmljstools_global.h"

#include <qmljs/qmljsdocument.h>

#include <texteditor/refactoringchanges.h>

namespace QmlJS { class ModelManagerInterface; }

namespace QmlJSTools {

class QmlJSRefactoringChanges;
class QmlJSRefactoringFile;
class QmlJSRefactoringChangesData;
using QmlJSRefactoringFilePtr = QSharedPointer<QmlJSRefactoringFile>;

class QMLJSTOOLS_EXPORT QmlJSRefactoringFile: public TextEditor::RefactoringFile
{
public:
    QmlJS::Document::Ptr qmljsDocument() const;
    QString qmlImports() const;

    /*!
        Returns the offset in the document for the start position of the given
                 source location.
     */
    unsigned startOf(const QmlJS::SourceLocation &loc) const;

    bool isCursorOn(QmlJS::AST::UiObjectMember *ast) const;
    bool isCursorOn(QmlJS::AST::UiQualifiedId *ast) const;
    bool isCursorOn(QmlJS::SourceLocation loc) const;

private:
    QmlJSRefactoringFile(const Utils::FilePath &filePath,
                         const QSharedPointer<QmlJSRefactoringChangesData> &data);
    QmlJSRefactoringFile(TextEditor::TextEditorWidget *editor, QmlJS::Document::Ptr document);

    void fileChanged() override;
    Utils::Id indenterId() const override;

    mutable QmlJS::Document::Ptr m_qmljsDocument;
    QSharedPointer<QmlJSRefactoringChangesData> m_data;

    friend class QmlJSRefactoringChanges;
};


class QMLJSTOOLS_EXPORT QmlJSRefactoringChanges: public TextEditor::RefactoringFileFactory
{
public:
    QmlJSRefactoringChanges(QmlJS::ModelManagerInterface *modelManager,
                            const QmlJS::Snapshot &snapshot);

    static QmlJSRefactoringFilePtr file(TextEditor::TextEditorWidget *editor,
                                        const QmlJS::Document::Ptr &document);
    TextEditor::RefactoringFilePtr file(const Utils::FilePath &filePath) const;

    QmlJSRefactoringFilePtr qmlJSFile(const Utils::FilePath &filePath) const;

    const QmlJS::Snapshot &snapshot() const;

private:
    const QSharedPointer<QmlJSRefactoringChangesData> m_data;
};

} // namespace QmlJSTools