diff --git a/CHANGES.md b/CHANGES.md
index 9ea48d5cc2..8e956b3597 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,6 +2,7 @@
Grammars:
+- fix(rust) highlight types immediately preceeding `::` (#3540) [Josh Goebel][]
- Added 3rd party Apex grammar to SUPPORTED_LANGUAGES (#3546) [David Schach][]
- fix(rust) recognize `include_bytes!` macro (#3541) [Serial-ATA][]
- fix(java) do not intepret `==` as a variable declaration [Mousetail][]
diff --git a/src/languages/rust.js b/src/languages/rust.js
index 4e65b578dd..3f43aeb478 100644
--- a/src/languages/rust.js
+++ b/src/languages/rust.js
@@ -288,7 +288,8 @@ export default function(hljs) {
begin: hljs.IDENT_RE + '::',
keywords: {
keyword: "Self",
- built_in: BUILTINS
+ built_in: BUILTINS,
+ type: TYPES
}
},
{
diff --git a/test/markup/rust/types.expect.txt b/test/markup/rust/types.expect.txt
index a84825dff2..185c8f1d92 100644
--- a/test/markup/rust/types.expect.txt
+++ b/test/markup/rust/types.expect.txt
@@ -2,3 +2,6 @@
type A;
type A = B;
type R<T> = m::R<T, ConcreteError>
+
+let vec: Vec<isize> = Vec::new();
+if 100 > i32::MAX {}
diff --git a/test/markup/rust/types.txt b/test/markup/rust/types.txt
index b8644e4983..c8c5c3749a 100644
--- a/test/markup/rust/types.txt
+++ b/test/markup/rust/types.txt
@@ -2,3 +2,6 @@ type A: Trait;
type A;
type A = B;
type R = m::R
+
+let vec: Vec = Vec::new();
+if 100 > i32::MAX {}