forked from qt-creator/qt-creator
Highlighter: Use file pattern matching if mime type is 'text/plain'
Do not try to match 'text/plain' mime types against highlight definitions, because it is automatically set if the file contains just printable characters in the first bytes, in this case file pattern matching gives better results. Fixes: QTCREATORBUG-22540 Change-Id: Ifd662cd6961011f5cf5d9232ce5f17d2314b4824 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -33,6 +33,7 @@
|
|||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/messagemanager.h>
|
#include <coreplugin/messagemanager.h>
|
||||||
#include <utils/mimetypes/mimedatabase.h>
|
#include <utils/mimetypes/mimedatabase.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <DefinitionDownloader>
|
#include <DefinitionDownloader>
|
||||||
#include <Format>
|
#include <Format>
|
||||||
@@ -119,6 +120,8 @@ Highlighter::Definition Highlighter::definitionForDocument(const TextDocument *d
|
|||||||
|
|
||||||
Highlighter::Definition Highlighter::definitionForMimeType(const QString &mimeType)
|
Highlighter::Definition Highlighter::definitionForMimeType(const QString &mimeType)
|
||||||
{
|
{
|
||||||
|
if (mimeType.isEmpty())
|
||||||
|
return {};
|
||||||
const Definitions definitions = definitionsForMimeType(mimeType);
|
const Definitions definitions = definitionsForMimeType(mimeType);
|
||||||
if (definitions.size() == 1)
|
if (definitions.size() == 1)
|
||||||
return definitions.first();
|
return definitions.first();
|
||||||
@@ -140,13 +143,23 @@ Highlighter::Definition Highlighter::definitionForName(const QString &name)
|
|||||||
|
|
||||||
Highlighter::Definitions Highlighter::definitionsForDocument(const TextDocument *document)
|
Highlighter::Definitions Highlighter::definitionsForDocument(const TextDocument *document)
|
||||||
{
|
{
|
||||||
const Utils::MimeType mimeType = Utils::mimeTypeForName(document->mimeType());
|
QTC_ASSERT(document, return {});
|
||||||
Definitions definitions;
|
const Utils::MimeType &mimeType = Utils::mimeTypeForName(document->mimeType());
|
||||||
if (mimeType.isValid())
|
if (mimeType.isValid()) {
|
||||||
definitions = Highlighter::definitionsForMimeType(mimeType.name());
|
if (mimeType.name() == "text/plain") {
|
||||||
if (definitions.isEmpty())
|
// text/plain is the base mime type for all text types so ignore it and try matching the
|
||||||
definitions = Highlighter::definitionsForFileName(document->filePath());
|
// file name against the pattern and only if no definition can be found for the
|
||||||
return definitions;
|
// file name try matching the mime type
|
||||||
|
const Definitions &fileNameDefinitions = definitionsForFileName(document->filePath());
|
||||||
|
if (!fileNameDefinitions.isEmpty())
|
||||||
|
return fileNameDefinitions;
|
||||||
|
return definitionsForMimeType(mimeType.name());
|
||||||
|
}
|
||||||
|
const Definitions &mimeTypeDefinitions = definitionsForMimeType(mimeType.name());
|
||||||
|
if (!mimeTypeDefinitions.isEmpty())
|
||||||
|
return mimeTypeDefinitions;
|
||||||
|
}
|
||||||
|
return definitionsForFileName(document->filePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
static Highlighter::Definition definitionForSetting(const QString &settingsKey,
|
static Highlighter::Definition definitionForSetting(const QString &settingsKey,
|
||||||
@@ -193,6 +206,7 @@ Highlighter::Definitions Highlighter::definitionsForFileName(const Utils::FilePa
|
|||||||
void Highlighter::rememberDefintionForDocument(const Highlighter::Definition &definition,
|
void Highlighter::rememberDefintionForDocument(const Highlighter::Definition &definition,
|
||||||
const TextDocument *document)
|
const TextDocument *document)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(document, return );
|
||||||
if (!definition.isValid())
|
if (!definition.isValid())
|
||||||
return;
|
return;
|
||||||
const QString &mimeType = document->mimeType();
|
const QString &mimeType = document->mimeType();
|
||||||
|
|||||||
Reference in New Issue
Block a user