diff --git a/plugins/yaml/resources/META-INF/plugin.xml b/plugins/yaml/resources/META-INF/plugin.xml
index 12b2fa58e7c5..09d96dad066b 100644
--- a/plugins/yaml/resources/META-INF/plugin.xml
+++ b/plugins/yaml/resources/META-INF/plugin.xml
@@ -13,6 +13,7 @@
+
diff --git a/plugins/yaml/src/org/jetbrains/yaml/YAMLFindUsagesProvider.java b/plugins/yaml/src/org/jetbrains/yaml/YAMLFindUsagesProvider.java
new file mode 100644
index 000000000000..f9e8e35f9f0a
--- /dev/null
+++ b/plugins/yaml/src/org/jetbrains/yaml/YAMLFindUsagesProvider.java
@@ -0,0 +1,70 @@
+package org.jetbrains.yaml;
+
+import com.intellij.lang.HelpID;
+import com.intellij.lang.cacheBuilder.WordsScanner;
+import com.intellij.lang.findUsages.FindUsagesProvider;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiNamedElement;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.yaml.psi.YAMLMapping;
+import org.jetbrains.yaml.psi.YAMLScalar;
+import org.jetbrains.yaml.psi.YAMLScalarText;
+import org.jetbrains.yaml.psi.YAMLSequence;
+
+/**
+ * @author shalupov
+ */
+public class YAMLFindUsagesProvider implements FindUsagesProvider {
+ @Nullable
+ @Override
+ public WordsScanner getWordsScanner() {
+ return new YAMLWordsScanner();
+ }
+
+ @Override
+ public boolean canFindUsagesFor(@NotNull PsiElement psiElement) {
+ return psiElement instanceof PsiNamedElement || psiElement instanceof YAMLScalar;
+ }
+
+ @Nullable
+ @Override
+ public String getHelpId(@NotNull PsiElement psiElement) {
+ return HelpID.FIND_OTHER_USAGES;
+ }
+
+ @NotNull
+ @Override
+ public String getType(@NotNull PsiElement element) {
+ if (element instanceof YAMLScalarText) {
+ return "scalar";
+ } else if (element instanceof YAMLSequence) {
+ return "sequence";
+ } else if (element instanceof YAMLMapping) {
+ return "mapping";
+ } else {
+ return "";
+ }
+ }
+
+ @NotNull
+ @Override
+ public String getDescriptiveName(@NotNull PsiElement element) {
+ final String name = element instanceof PsiNamedElement ? ((PsiNamedElement)element).getName() : null;
+ if (name != null) {
+ return name;
+ }
+
+ if (element instanceof YAMLScalar) {
+ return ((YAMLScalar)element).getTextValue();
+ }
+
+ return "";
+ }
+
+ @NotNull
+ @Override
+ public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
+ return getDescriptiveName(element);
+ }
+}
\ No newline at end of file
diff --git a/plugins/yaml/src/org/jetbrains/yaml/YAMLWordsScanner.java b/plugins/yaml/src/org/jetbrains/yaml/YAMLWordsScanner.java
new file mode 100644
index 000000000000..895e5b3d9afc
--- /dev/null
+++ b/plugins/yaml/src/org/jetbrains/yaml/YAMLWordsScanner.java
@@ -0,0 +1,22 @@
+package org.jetbrains.yaml;
+
+import com.intellij.lang.cacheBuilder.DefaultWordsScanner;
+import com.intellij.psi.tree.TokenSet;
+import org.jetbrains.yaml.lexer.YAMLFlexLexer;
+
+/**
+ * @author shalupov
+ */
+public class YAMLWordsScanner extends DefaultWordsScanner {
+ public YAMLWordsScanner() {
+ super(
+ new YAMLFlexLexer(),
+ TokenSet.create(
+ YAMLElementTypes.SCALAR_TEXT_VALUE,
+ YAMLElementTypes.SCALAR_PLAIN_VALUE,
+ YAMLElementTypes.SCALAR_QUOTED_STRING),
+ TokenSet.create(YAMLTokenTypes.COMMENT),
+ TokenSet.EMPTY);
+ setMayHaveFileRefsInLiterals(true);
+ }
+}