aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-06-21 14:16:54 +0200
committerDavid Schulz <david.schulz@qt.io>2019-06-24 08:21:44 +0000
commit6dde7767ce0e117d1281a7c7922b282793ba5871 (patch)
treeb86ed3a8b6cb1023683f2a59a64d4bfefc41814b
parent3717ca9574d82dd42405ebff14243111c078cf2a (diff)
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>
-rw-r--r--src/plugins/texteditor/highlighter.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp
index d1f7dbc1bf..bbeff2a484 100644
--- a/src/plugins/texteditor/highlighter.cpp
+++ b/src/plugins/texteditor/highlighter.cpp
@@ -33,6 +33,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h>
#include <utils/mimetypes/mimedatabase.h>
+#include <utils/qtcassert.h>
#include <DefinitionDownloader>
#include <Format>
@@ -119,6 +120,8 @@ Highlighter::Definition Highlighter::definitionForDocument(const TextDocument *d
Highlighter::Definition Highlighter::definitionForMimeType(const QString &mimeType)
{
+ if (mimeType.isEmpty())
+ return {};
const Definitions definitions = definitionsForMimeType(mimeType);
if (definitions.size() == 1)
return definitions.first();
@@ -140,13 +143,23 @@ Highlighter::Definition Highlighter::definitionForName(const QString &name)
Highlighter::Definitions Highlighter::definitionsForDocument(const TextDocument *document)
{
- const Utils::MimeType mimeType = Utils::mimeTypeForName(document->mimeType());
- Definitions definitions;
- if (mimeType.isValid())
- definitions = Highlighter::definitionsForMimeType(mimeType.name());
- if (definitions.isEmpty())
- definitions = Highlighter::definitionsForFileName(document->filePath());
- return definitions;
+ QTC_ASSERT(document, return {});
+ const Utils::MimeType &mimeType = Utils::mimeTypeForName(document->mimeType());
+ if (mimeType.isValid()) {
+ if (mimeType.name() == "text/plain") {
+ // text/plain is the base mime type for all text types so ignore it and try matching the
+ // file name against the pattern and only if no definition can be found for the
+ // 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,
@@ -193,6 +206,7 @@ Highlighter::Definitions Highlighter::definitionsForFileName(const Utils::FilePa
void Highlighter::rememberDefintionForDocument(const Highlighter::Definition &definition,
const TextDocument *document)
{
+ QTC_ASSERT(document, return );
if (!definition.isValid())
return;
const QString &mimeType = document->mimeType();