diff options
author | David Schulz <david.schulz@qt.io> | 2019-06-21 14:16:54 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-06-24 08:21:44 +0000 |
commit | 6dde7767ce0e117d1281a7c7922b282793ba5871 (patch) | |
tree | b86ed3a8b6cb1023683f2a59a64d4bfefc41814b | |
parent | 3717ca9574d82dd42405ebff14243111c078cf2a (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.cpp | 28 |
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(); |