Python: prevent setting local env to remote pyls

Change-Id: Id0eea5420c897687e6931bf640e3a37ba2638b8f
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2022-06-15 13:10:26 +02:00
parent e7d90c23b6
commit 1956fa0365
3 changed files with 18 additions and 13 deletions

View File

@@ -99,10 +99,6 @@ void BaseClientInterface::parseCurrentMessage()
m_currentMessage = BaseMessage(); m_currentMessage = BaseMessage();
} }
StdIOClientInterface::StdIOClientInterface()
: m_env(Utils::Environment::systemEnvironment())
{}
StdIOClientInterface::~StdIOClientInterface() StdIOClientInterface::~StdIOClientInterface()
{ {
delete m_process; delete m_process;
@@ -128,7 +124,8 @@ void StdIOClientInterface::startImpl()
}); });
m_process->setCommand(m_cmd); m_process->setCommand(m_cmd);
m_process->setWorkingDirectory(m_workingDirectory); m_process->setWorkingDirectory(m_workingDirectory);
m_process->setEnvironment(m_env); if (m_env.isValid())
m_process->setEnvironment(m_env);
m_process->start(); m_process->start();
} }

View File

@@ -72,7 +72,7 @@ class LANGUAGECLIENT_EXPORT StdIOClientInterface : public BaseClientInterface
{ {
Q_OBJECT Q_OBJECT
public: public:
StdIOClientInterface(); StdIOClientInterface() = default;
~StdIOClientInterface() override; ~StdIOClientInterface() override;
StdIOClientInterface(const StdIOClientInterface &) = delete; StdIOClientInterface(const StdIOClientInterface &) = delete;

View File

@@ -153,14 +153,22 @@ class PyLSInterface : public StdIOClientInterface
public: public:
PyLSInterface() PyLSInterface()
: m_extraPythonPath("QtCreator-pyls-XXXXXX") : m_extraPythonPath("QtCreator-pyls-XXXXXX")
{ { }
Environment env = Environment::systemEnvironment();
env.appendOrSet("PYTHONPATH",
m_extraPythonPath.path().toString(),
OsSpecificAspects::pathListSeparator(env.osType()));
setEnvironment(env);
}
TemporaryDirectory m_extraPythonPath; TemporaryDirectory m_extraPythonPath;
protected:
void startImpl() override
{
if (!m_cmd.executable().needsDevice()) {
// todo check where to put this tempdir in remote setups
Environment env = Environment::systemEnvironment();
env.appendOrSet("PYTHONPATH",
m_extraPythonPath.path().toString(),
OsSpecificAspects::pathListSeparator(env.osType()));
setEnvironment(env);
}
StdIOClientInterface::startImpl();
}
}; };
PyLSClient *clientForPython(const FilePath &python) PyLSClient *clientForPython(const FilePath &python)