Skip to content

Commit d9f38db

Browse files
committed
Rewrite plugin loading to go through the core; commented out all but core functionality to do that; next steps is mostly just uncommenting code and seeing what needs to be changed
1 parent 9926db6 commit d9f38db

File tree

13 files changed

+734
-931
lines changed

13 files changed

+734
-931
lines changed

binaryninjaapi.cpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,6 @@ bool BinaryNinja::InitPlugins(bool allowUserPlugins)
4949
}
5050

5151

52-
void BinaryNinja::InitCorePlugins()
53-
{
54-
BNInitCorePlugins();
55-
}
56-
57-
58-
void BinaryNinja::InitUserPlugins()
59-
{
60-
BNInitUserPlugins();
61-
}
62-
63-
64-
void BinaryNinja::InitExtensions()
65-
{
66-
BNInitExtensions();
67-
}
68-
69-
7052
string BinaryNinja::GetBundledPluginDirectory()
7153
{
7254
char* path = BNGetBundledPluginDirectory();

binaryninjaapi.h

Lines changed: 49 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,15 +1165,6 @@ namespace BinaryNinja {
11651165
void DisablePlugins();
11661166
bool IsPluginsEnabled();
11671167
bool InitPlugins(bool allowUserPlugins = true);
1168-
/*!
1169-
\deprecated Use `InitPlugins()`
1170-
*/
1171-
void InitCorePlugins(); // Deprecated, use InitPlugins
1172-
/*!
1173-
\deprecated Use `InitPlugins()`
1174-
*/
1175-
void InitUserPlugins(); // Deprecated, use InitPlugins
1176-
void InitExtensions();
11771168

11781169
std::string GetBundledPluginDirectory();
11791170
void SetBundledPluginDirectory(const std::string& path);
@@ -16783,26 +16774,24 @@ namespace BinaryNinja {
1678316774
virtual bool RunProgressDialog(const std::string& title, bool canCancel, std::function<void(std::function<bool(size_t, size_t)> progress)> task) = 0;
1678416775
};
1678516776

16786-
typedef BNPluginOrigin PluginOrigin;
1678716777
typedef BNPluginStatus PluginStatus;
16788-
typedef BNPluginType PluginType;
1678916778

16790-
/*!
16791-
* \ingroup extensionmanager
16792-
*/
16793-
class ExtensionVersion : public CoreRefCountObject<BNExtensionVersion, BNNewExtensionVersionReference, BNFreeExtensionVersion>
16794-
{
16795-
public:
16796-
ExtensionVersion(BNExtensionVersion* version);
16797-
std::string GetVersionString() const;
16798-
std::string GetLongDescription() const;
16799-
std::string GetChangelog() const;
16800-
BNVersionInfo GetMinimumVersionInfo() const;
16801-
BNVersionInfo GetMaximumVersionInfo() const;
16802-
std::string GetDependencies() const;
16803-
std::string GetDownloadUrl(bool useShortUrl = true) const;
16804-
bool InstallDependencies() const;
16805-
};
16779+
// /*!
16780+
// * \ingroup extensionmanager
16781+
// */
16782+
// class ExtensionVersion : public CoreRefCountObject<BNExtensionVersion, BNNewExtensionVersionReference, BNFreeExtensionVersion>
16783+
// {
16784+
// public:
16785+
// ExtensionVersion(BNExtensionVersion* version);
16786+
// std::string GetVersionString() const;
16787+
// std::string GetLongDescription() const;
16788+
// std::string GetChangelog() const;
16789+
// BNVersionInfo GetMinimumVersionInfo() const;
16790+
// BNVersionInfo GetMaximumVersionInfo() const;
16791+
// std::string GetDependencies() const;
16792+
// std::string GetDownloadUrl(bool contributeToInstallCounts = true) const;
16793+
// bool InstallDependencies() const;
16794+
// };
1680616795

1680716796
/*!
1680816797
* \ingroup extensionmanager
@@ -16811,34 +16800,38 @@ namespace BinaryNinja {
1681116800
{
1681216801
public:
1681316802
Extension(BNExtension* extension);
16814-
PluginStatus GetPluginStatus() const;
1681516803
std::string GetPath() const;
16804+
// PluginStatus GetPluginStatus() const;
16805+
16806+
bool IsInstalled() const;
16807+
bool IsEnabled() const;
16808+
1681616809
std::string GetAuthor() const;
1681716810
std::string GetDescription() const;
1681816811
std::string GetName() const;
16819-
std::vector<PluginType> GetPluginTypes() const;
16812+
std::string GetPluginType() const;
1682016813
std::string GetProjectUrl() const;
16814+
1682116815
std::string GetChannelName() const;
16822-
std::vector<Ref<ExtensionVersion>> GetVersions() const;
16823-
Ref<ExtensionVersion> GetCurrentVersion() const;
16824-
Ref<ExtensionVersion> GetLatestVersion() const;
16825-
std::vector<std::string> GetInstallPlatforms() const;
16826-
bool IsBeingDeleted() const;
16827-
bool IsBeingUpdated() const;
16828-
bool IsInstalled() const;
16829-
bool IsEnabled() const;
16816+
// std::vector<Ref<ExtensionVersion>> GetVersions() const;
16817+
// Ref<ExtensionVersion> GetCurrentVersion() const;
16818+
// Ref<ExtensionVersion> GetLatestVersion() const;
16819+
// bool IsBeingDeleted() const;
16820+
// bool IsBeingUpdated() const;
16821+
// bool IsInstalled() const;
16822+
// bool IsEnabled() const;
1683016823
bool IsRunning() const;
16831-
bool IsUpdatePending() const;
16832-
bool IsDisablePending() const;
16833-
bool IsDeletePending() const;
16834-
bool IsUpdateAvailable() const;
16835-
bool AreDependenciesBeingInstalled() const;
16836-
bool Uninstall();
16837-
bool Install(Ref<ExtensionVersion> version = nullptr);
16838-
bool InstallDependencies();
16824+
// bool IsUpdatePending() const;
16825+
// bool IsDisablePending() const;
16826+
// bool IsDeletePending() const;
16827+
// bool IsUpdateAvailable() const;
16828+
// bool AreDependenciesBeingInstalled() const;
16829+
// bool Uninstall();
16830+
// bool Install(Ref<ExtensionVersion> version = nullptr);
16831+
// bool InstallDependencies();
1683916832
bool Enable();
16833+
// bool Update(Ref<ExtensionVersion> version = nullptr);
1684016834
bool Disable();
16841-
bool Update(Ref<ExtensionVersion> version = nullptr);
1684216835
};
1684316836

1684416837
/*!
@@ -16848,34 +16841,28 @@ namespace BinaryNinja {
1684816841
{
1684916842
public:
1685016843
ExtensionChannel(BNExtensionChannel* channel);
16851-
std::string GetUrl() const;
16844+
// std::string GetUrl() const;
1685216845
std::string GetName() const;
16853-
bool IsUserChannel() const;
1685416846
std::vector<Ref<Extension>> GetExtensions() const;
16855-
Ref<Extension> GetExtensionByPath(const std::string& extensionPath);
16856-
std::string GetFullPath() const;
16857-
std::string GetExtensionTypePath(PluginType type) const;
16847+
// Ref<Extension> GetExtensionByPath(const std::string& pluginPath);
16848+
// std::string GetFullPath() const;
1685816849
};
1685916850

1686016851
/*!
1686116852
* \ingroup extensionmanager
1686216853
*/
16863-
class ExtensionManager :
16864-
public CoreRefCountObject<BNExtensionManager, BNNewExtensionManagerReference, BNFreeExtensionManager>
16854+
class ExtensionManager
1686516855
{
16856+
BNExtensionManager* m_object;
1686616857
public:
1686716858
ExtensionManager(BNExtensionManager* manager);
1686816859
ExtensionManager();
16869-
static ExtensionManager& Instance();
16870-
bool CheckForUpdates();
16871-
bool FetchChannelsAsync();
16860+
// bool CheckForUpdates();
16861+
// bool FetchChannelsAsync();
1687216862
std::vector<Ref<ExtensionChannel>> GetChannels();
16873-
Ref<ExtensionChannel> GetChannelByName(const std::string& name);
16874-
bool AddChannel(const std::string& url,
16875-
const std::string& name,
16876-
bool isUserChannel = false);
16877-
Ref<ExtensionChannel> GetDefaultChannel();
16878-
std::string GetUserExtensionsDirectory() const;
16863+
// Ref<ExtensionChannel> GetChannelByName(const std::string& name);
16864+
// bool AddChannel(const std::string& url, const std::string& name);
16865+
// std::string GetUserExtensionsDirectory() const;
1687916866
};
1688016867

1688116868
/*! \c Settings provides a way to define and access settings in a hierarchical fashion. The value of a setting can

binaryninjacore.h

Lines changed: 40 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ extern "C"
256256
typedef struct BNExtensionManager BNExtensionManager;
257257
typedef struct BNExtensionChannel BNExtensionChannel;
258258
typedef struct BNExtension BNExtension;
259-
typedef struct BNExtensionVersion BNExtensionVersion;
259+
// typedef struct BNExtensionVersion BNExtensionVersion;
260260
typedef struct BNComponent BNComponent;
261261
typedef struct BNSettings BNSettings;
262262
typedef struct BNMetadata BNMetadata;
@@ -1099,13 +1099,6 @@ extern "C"
10991099
// LookupTableValue results
11001100
} BNDataFlowQueryOption;
11011101

1102-
typedef enum BNPluginOrigin
1103-
{
1104-
OfficialPluginOrigin,
1105-
CommunityPluginOrigin,
1106-
OtherPluginOrigin
1107-
} BNPluginOrigin;
1108-
11091102
typedef enum BNPluginStatus
11101103
{
11111104
NotInstalledPluginStatus = 0x00000000,
@@ -1121,16 +1114,6 @@ extern "C"
11211114
DependenciesBeingInstalledStatus = 0x00001000
11221115
} BNPluginStatus;
11231116

1124-
typedef enum BNPluginType
1125-
{
1126-
CorePluginType,
1127-
UiPluginType,
1128-
ArchitecturePluginType,
1129-
BinaryViewPluginType,
1130-
HelperPluginType,
1131-
SyncPluginType
1132-
} BNPluginType;
1133-
11341117
typedef struct BNLookupTableEntry
11351118
{
11361119
int64_t* fromValues;
@@ -3682,12 +3665,9 @@ extern "C"
36823665

36833666
// Plugin initialization
36843667
BINARYNINJACOREAPI bool BNInitPlugins(bool allowUserPlugins);
3685-
BINARYNINJACOREAPI bool BNInitCorePlugins(void); // Deprecated, use BNInitPlugins
36863668
BINARYNINJACOREAPI void BNDisablePlugins(void);
36873669
BINARYNINJACOREAPI bool BNIsPluginsEnabled(void);
3688-
BINARYNINJACOREAPI void BNInitUserPlugins(void); // Deprecated, use BNInitPlugins
3689-
BINARYNINJACOREAPI void BNInitExtensions(void);
3690-
BINARYNINJACOREAPI void BNLoadPluginsInDirectory(const char*);
3670+
// BINARYNINJACOREAPI void BNLoadPluginsInDirectory(const char*);
36913671

36923672
BINARYNINJACOREAPI char* BNGetInstallDirectory(void);
36933673
BINARYNINJACOREAPI char* BNGetBundledPluginDirectory(void);
@@ -7215,16 +7195,16 @@ extern "C"
72157195
BNType** outType, BNQualifiedName* outVarName, BNBinaryView* view, bool simplify);
72167196

72177197
// Extension Version APIs
7218-
BINARYNINJACOREAPI const char* BNExtensionVersionGetVersionString(BNExtensionVersion* v);
7219-
BINARYNINJACOREAPI const char* BNExtensionVersionGetLongDescription(BNExtensionVersion* v);
7220-
BINARYNINJACOREAPI const char* BNExtensionVersionGetChangelog(BNExtensionVersion* v);
7221-
BINARYNINJACOREAPI BNVersionInfo BNExtensionVersionGetMinimumVersionInfo(BNExtensionVersion* v);
7222-
BINARYNINJACOREAPI BNVersionInfo BNExtensionVersionGetMaximumVersionInfo(BNExtensionVersion* v);
7223-
BINARYNINJACOREAPI const char* BNExtensionVersionGetDependencies(BNExtensionVersion* v);
7224-
BINARYNINJACOREAPI const char* BNExtensionVersionGetDownloadUrl(BNExtensionVersion* v, bool useShortUrl);
7225-
BINARYNINJACOREAPI bool BNExtensionVersionInstallDependencies(BNExtensionVersion* v);
7226-
BINARYNINJACOREAPI BNExtensionVersion* BNNewExtensionVersionReference(BNExtensionVersion* v);
7227-
BINARYNINJACOREAPI void BNFreeExtensionVersion(BNExtensionVersion* v);
7198+
// BINARYNINJACOREAPI const char* BNExtensionVersionGetVersionString(BNExtensionVersion* v);
7199+
// BINARYNINJACOREAPI const char* BNExtensionVersionGetLongDescription(BNExtensionVersion* v);
7200+
// BINARYNINJACOREAPI const char* BNExtensionVersionGetChangelog(BNExtensionVersion* v);
7201+
// BINARYNINJACOREAPI BNVersionInfo BNExtensionVersionGetMinimumVersionInfo(BNExtensionVersion* v);
7202+
// BINARYNINJACOREAPI BNVersionInfo BNExtensionVersionGetMaximumVersionInfo(BNExtensionVersion* v);
7203+
// BINARYNINJACOREAPI const char* BNExtensionVersionGetDependencies(BNExtensionVersion* v);
7204+
// BINARYNINJACOREAPI const char* BNExtensionVersionGetDownloadUrl(BNExtensionVersion* v, bool contributeToInstallCounts);
7205+
// BINARYNINJACOREAPI bool BNExtensionVersionInstallDependencies(BNExtensionVersion* v);
7206+
// BINARYNINJACOREAPI BNExtensionVersion* BNNewExtensionVersionReference(BNExtensionVersion* v);
7207+
// BINARYNINJACOREAPI void BNFreeExtensionVersion(BNExtensionVersion* v);
72287208

72297209
// Extension APIs (formerly Plugin APIs)
72307210
BINARYNINJACOREAPI const char* BNExtensionGetAuthor(BNExtension* p);
@@ -7233,56 +7213,54 @@ extern "C"
72337213
BINARYNINJACOREAPI const char* BNExtensionGetProjectUrl(BNExtension* p);
72347214
BINARYNINJACOREAPI BNVersionInfo BNParseVersionString(const char* v);
72357215
BINARYNINJACOREAPI bool BNVersionLessThan(const BNVersionInfo smaller, const BNVersionInfo larger);
7236-
BINARYNINJACOREAPI BNPluginType* BNExtensionGetPluginTypes(BNExtension* p, size_t* count);
7237-
BINARYNINJACOREAPI void BNFreePluginTypes(BNPluginType* r);
7238-
BINARYNINJACOREAPI BNExtensionVersion** BNExtensionGetVersions(BNExtension* p, size_t* count);
7239-
BINARYNINJACOREAPI void BNFreeExtensionVersionList(BNExtensionVersion** v);
7240-
BINARYNINJACOREAPI BNExtensionVersion* BNExtensionGetCurrentVersion(BNExtension* p);
7241-
BINARYNINJACOREAPI BNExtensionVersion* BNExtensionGetLatestVersion(BNExtension* p);
7216+
// BINARYNINJACOREAPI BNExtensionVersion** BNExtensionGetVersions(BNExtension* p, size_t* count);
7217+
// BINARYNINJACOREAPI void BNFreeExtensionVersionList(BNExtensionVersion** v);
7218+
// BINARYNINJACOREAPI BNExtensionVersion* BNExtensionGetCurrentVersion(BNExtension* p);
7219+
// BINARYNINJACOREAPI BNExtensionVersion* BNExtensionGetLatestVersion(/BNExtension* p);
72427220
BINARYNINJACOREAPI BNExtension* BNNewExtensionReference(BNExtension* p);
72437221
BINARYNINJACOREAPI void BNFreeExtension(BNExtension* plugin);
72447222
BINARYNINJACOREAPI const char* BNExtensionGetPath(BNExtension* p);
72457223
BINARYNINJACOREAPI const char* BNExtensionGetChannelName(BNExtension* p);
72467224
BINARYNINJACOREAPI bool BNExtensionIsInstalled(BNExtension* p);
72477225
BINARYNINJACOREAPI bool BNExtensionIsEnabled(BNExtension* p);
7248-
BINARYNINJACOREAPI BNPluginStatus BNExtensionGetPluginStatus(BNExtension* p);
7226+
// BINARYNINJACOREAPI BNPluginStatus BNExtensionGetPluginStatus(BNExtension* p);
72497227
BINARYNINJACOREAPI bool BNExtensionEnable(BNExtension* p);
72507228
BINARYNINJACOREAPI bool BNExtensionDisable(BNExtension* p);
7251-
BINARYNINJACOREAPI bool BNExtensionInstall(BNExtension* p, BNExtensionVersion* v);
7252-
BINARYNINJACOREAPI bool BNExtensionInstallDependencies(BNExtension* p);
7253-
BINARYNINJACOREAPI bool BNExtensionUninstall(BNExtension* p);
7254-
BINARYNINJACOREAPI bool BNExtensionUpdate(BNExtension* p, BNExtensionVersion* v);
7255-
BINARYNINJACOREAPI bool BNExtensionIsBeingDeleted(BNExtension* p);
7256-
BINARYNINJACOREAPI bool BNExtensionIsBeingUpdated(BNExtension* p);
7229+
// BINARYNINJACOREAPI bool BNExtensionInstall(BNExtension* p, BNExtensionVersion* v);
7230+
// BINARYNINJACOREAPI bool BNExtensionInstallDependencies(BNExtension* p);
7231+
// BINARYNINJACOREAPI bool BNExtensionUninstall(BNExtension* p);
7232+
// BINARYNINJACOREAPI bool BNExtensionUpdate(BNExtension* p, BNExtensionVersion* v);
7233+
// BINARYNINJACOREAPI bool BNExtensionIsBeingDeleted(BNExtension* p);
7234+
// BINARYNINJACOREAPI bool BNExtensionIsBeingUpdated(BNExtension* p);
72577235
BINARYNINJACOREAPI bool BNExtensionIsRunning(BNExtension* p);
7258-
BINARYNINJACOREAPI bool BNExtensionIsUpdatePending(BNExtension* p);
7259-
BINARYNINJACOREAPI bool BNExtensionIsDisablePending(BNExtension* p);
7260-
BINARYNINJACOREAPI bool BNExtensionIsDeletePending(BNExtension* p);
7261-
BINARYNINJACOREAPI bool BNExtensionIsUpdateAvailable(BNExtension* p);
7262-
BINARYNINJACOREAPI bool BNExtensionAreDependenciesBeingInstalled(BNExtension* p);
7236+
// BINARYNINJACOREAPI bool BNExtensionIsUpdatePending(BNExtension* p);
7237+
// BINARYNINJACOREAPI bool BNExtensionIsDisablePending(BNExtension* p);
7238+
// BINARYNINJACOREAPI bool BNExtensionIsDeletePending(BNExtension* p);
7239+
// BINARYNINJACOREAPI bool BNExtensionIsUpdateAvailable(BNExtension* p);
7240+
// BINARYNINJACOREAPI bool BNExtensionAreDependenciesBeingInstalled(BNExtension* p);
72637241

72647242
// Channel APIs (formerly Repository APIs)
72657243
BINARYNINJACOREAPI BNExtensionChannel* BNNewChannelReference(BNExtensionChannel* r);
72667244
BINARYNINJACOREAPI void BNFreeChannel(BNExtensionChannel* r);
7267-
BINARYNINJACOREAPI char* BNChannelGetUrl(BNExtensionChannel* r);
7245+
// BINARYNINJACOREAPI char* BNChannelGetUrl(BNExtensionChannel* r);
72687246
BINARYNINJACOREAPI char* BNChannelGetName(BNExtensionChannel* r);
72697247
BINARYNINJACOREAPI BNExtension** BNChannelGetExtensions(BNExtensionChannel* r, size_t* count);
72707248
BINARYNINJACOREAPI void BNFreeChannelExtensionList(BNExtension** r);
7271-
BINARYNINJACOREAPI BNExtension* BNChannelGetExtensionByPath(BNExtensionChannel* r, const char* extensionPath);
7272-
BINARYNINJACOREAPI const char* BNChannelGetFullPath(BNExtensionChannel* r);
7249+
// BINARYNINJACOREAPI BNExtension* BNChannelGetExtensionByPath(BNExtensionChannel* r, const char* extensionPath);
7250+
// BINARYNINJACOREAPI const char* BNChannelGetFullPath(BNExtensionChannel* r);
72737251

72747252
// Extension Manager APIs (formerly Repository Manager APIs)
7275-
BINARYNINJACOREAPI BNExtensionManager* BNNewExtensionManagerReference(BNExtensionManager* r);
7276-
BINARYNINJACOREAPI void BNFreeExtensionManager(BNExtensionManager* r);
72777253
BINARYNINJACOREAPI BNExtensionManager* BNGetExtensionManager(void);
7278-
BINARYNINJACOREAPI bool BNExtensionManagerCheckForUpdates(BNExtensionManager* r);
7279-
BINARYNINJACOREAPI bool BNExtensionManagerFetchChannelsAsync(BNExtensionManager* r);
7280-
BINARYNINJACOREAPI BNExtensionChannel** BNExtensionManagerGetChannels(BNExtensionManager* r, size_t* count);
7254+
// BINARYNINJACOREAPI bool BNExtensionManagerCheckForUpdates();
7255+
// BINARYNINJACOREAPI bool BNExtensionManagerFetchChannelsAsync();
7256+
BINARYNINJACOREAPI BNExtensionChannel** BNExtensionManagerGetChannels(size_t* count);
72817257
BINARYNINJACOREAPI void BNFreeExtensionManagerChannelsList(BNExtensionChannel** r);
7282-
BINARYNINJACOREAPI bool BNExtensionManagerAddChannel(
7283-
BNExtensionManager* r, const char* url, const char* name, bool isUserChannel);
7284-
BINARYNINJACOREAPI BNExtensionChannel* BNExtensionManagerGetChannelByName(BNExtensionManager* r, const char* name);
7285-
BINARYNINJACOREAPI BNExtensionChannel* BNExtensionManagerGetDefaultChannel(BNExtensionManager* r);
7258+
// BINARYNINJACOREAPI bool BNExtensionManagerAddChannel(const char* url, const char* name);
7259+
// BINARYNINJACOREAPI BNExtensionChannel* BNExtensionManagerGetChannelByName(const char* name);
7260+
7261+
BINARYNINJACOREAPI const char* BNExtensionGetPluginType(BNExtension* p);
7262+
// BINARYNINJACOREAPI bool BNExtensionManagerDiscoverLocalPlugins();
7263+
// BINARYNINJACOREAPI bool BNExtensionManagerAddCorePlugin(const char* name, const char* path, BNCorePluginInitFunction init, BNPluginLoadOrder order, const char** requiredDeps, size_t requiredDepCount, const char** optionalDeps, size_t optionalDepCount);
72867264

72877265
// Components
72887266

docs/guide/settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ All settings are uniquely identified with an identifier string. Identifiers are
270270
|pluginManager|Official Plugin Repository|Whether the official plugin repository is enabled|`boolean`|`True`|[`SettingsUserScope`]|<a id='pluginManager.officialRepo'>pluginManager.officialRepo</a>|
271271
|pluginManager|Unofficial 3rd Party Plugin Repository Display Name|Specify display name of 3rd party plugin repository.|`string`| |[`SettingsUserScope`]|<a id='pluginManager.unofficialName'>pluginManager.unofficialName</a>|
272272
|pluginManager|Unofficial 3rd Party Plugin Repository URL|Specify URL of 3rd party plugin|`string`| |[`SettingsUserScope`]|<a id='pluginManager.unofficialUrl'>pluginManager.unofficialUrl</a>|
273-
|pluginManager|Use Short URL|When enabled, will use a shortened URL for package installation which contributes to total install counts.|`boolean`|`True`|[`SettingsUserScope`]|<a id='pluginManager.useShortUrl'>pluginManager.useShortUrl</a>|
273+
|pluginManager|Use Short URL|When enabled, will use a shortened URL for package installation which contributes to total install counts.|`boolean`|`True`|[`SettingsUserScope`]|<a id='pluginManager.contributeToInstallCounts'>pluginManager.contributeToInstallCounts</a>|
274274
|projects|Project Folder Import Follows Symlinks|If enabled, follow symlinks when importing a folder to a project.|`boolean`|`False`|[`SettingsUserScope`]|<a id='projects.folderImportFollowsSymlinks'>projects.folderImportFollowsSymlinks</a>|
275275
|python|Python Path Override|Python interpreter binary which may be necessary to install plugin dependencies. Should be the same version as the one specified in the 'Python Interpreter' setting|`string`| |[`SettingsUserScope`]|<a id='python.binaryOverride'>python.binaryOverride</a>|
276276
|python|Python Interpreter|Python interpreter library(dylib/dll/so.1) to load if one is not already present when plugins are loaded.|`string`| |[`SettingsUserScope`]|<a id='python.interpreter'>python.interpreter</a>|

0 commit comments

Comments
 (0)