forked from KDE/kdev-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ziglanguagesupport.cpp
122 lines (97 loc) · 3.64 KB
/
ziglanguagesupport.cpp
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
* Copyright 2017 Emma Gospodinova <[email protected]>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ziglanguagesupport.h"
#include <zigdebug.h>
#include <interfaces/icore.h>
#include <interfaces/idocument.h>
#include <interfaces/idocumentcontroller.h>
#include <interfaces/ilanguagecontroller.h>
#include <language/duchain/duchainlock.h>
#include <language/duchain/duchainutils.h>
#include <language/codecompletion/codecompletion.h>
#include <KPluginFactory>
#include <QReadWriteLock>
#include <QStandardPaths>
#include "zigparsejob.h"
#include "codecompletion/model.h"
#include "projectconfig/projectconfigpage.h"
#include <language/backgroundparser/backgroundparser.h>
#include <language/duchain/parsingenvironment.h>
#include "zigparsejob.h"
K_PLUGIN_FACTORY_WITH_JSON(KDevZigSupportFactory, "kdevzigsupport.json", registerPlugin<Zig::LanguageSupport>(); )
using namespace KDevelop;
namespace Zig
{
LanguageSupport* LanguageSupport::m_self = nullptr;
LanguageSupport::LanguageSupport(QObject *parent, const QVariantList &args)
: KDevelop::IPlugin(QStringLiteral("kdevzigsupport"), parent),
KDevelop::ILanguageSupport(),
m_highlighting(new Highlighting(this))
{
m_self = this;
Q_UNUSED(args);
new CodeCompletion(this, new CompletionModel(this), name());
}
LanguageSupport::~LanguageSupport()
{
parseLock()->lockForWrite();
parseLock()->unlock();
delete m_highlighting;
m_highlighting = nullptr;
}
QString LanguageSupport::name() const
{
return QLatin1String("Zig");
}
KDevelop::ParseJob *LanguageSupport::createParseJob(const KDevelop::IndexedString &url)
{
return new ParseJob(url, this);
}
ICodeHighlighting *LanguageSupport::codeHighlighting() const
{
return m_highlighting;
}
SourceFormatterItemList LanguageSupport::sourceFormatterItems() const
{
SourceFormatterStyle zigFormatter(QLatin1String("zig fmt"));
zigFormatter.setCaption(QLatin1String("zig fmt"));
zigFormatter.setDescription(i18n("Format source with zig fmt."));
zigFormatter.setMimeTypes(SourceFormatterStyle::MimeList {
SourceFormatterStyle::MimeHighlightPair { QLatin1String("text/zig"), QLatin1String("Zig") },
SourceFormatterStyle::MimeHighlightPair { QLatin1String("text/x-zig"), QLatin1String("Zig") }
});
QString zigPath = QStandardPaths::findExecutable(QLatin1String("zig"));
if (zigPath.isEmpty()) {
qCDebug(KDEV_ZIG) << "Could not find the zig executable";
zigPath = QLatin1String("/usr/bin/zig");
}
zigFormatter.setContent(QLatin1String("%1 fmt $TMPFILE").arg(zigPath));
return SourceFormatterItemList { SourceFormatterStyleItem { QLatin1String("customscript"), zigFormatter } };
}
int LanguageSupport::perProjectConfigPages() const
{
return 1;
}
KDevelop::ConfigPage* LanguageSupport::perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options, QWidget* parent)
{
if ( number == 0 ) {
return new ProjectConfigPage(this, options, parent);
}
return nullptr;
}
}
#include "ziglanguagesupport.moc"