IDE中，选中一个变量，文档中其它地方的该变量也会高亮，这种功能叫什么？如何实现的？
这种功能可以有很多不同的叫法，但其本质都是搜索一个语法元素（例如一个变量名）所代表的实体（例如一个变量）的所有被引用的地方（occurrences / references）。 这种功能的实现要点有这么几个：parser、AST、符号表。 Visual Studio代码不开源所以不方便用来讨论实现。 在IntelliJ里，这个功能叫做“Highlight Usages”： 拿开源的Eclipse的Java Development Tools（JDT）为例。这个功能在Eclipse JDT里叫做“mark occurrences”： 这个功能的实现可以从下面的链接开始跟踪： 为举例方便，来详细看看其中在 的一段： 可以看到，假如在编译器中被选定的AST节点是一个“名字”（例如说标识符），那么接下来要做的事情就是： 渔就给这么多，接下来题主可以自己探索下去啦～ ============================================= 题主说了“例如VS”，所以这里的回答假定题主想知道的是高质量的“找出引用”功能。 如果不要求质量很高，也有更简单的做法。补充个例子说明啥叫质量高。 假如有这样的Java代码： 这段代码里一共出现了5次“bar”标识符，但其实背后是3个不同的符号： 按照前面说的方法做分析的话，这里会得到如下的抽象语法树：（仅为讲解而写的简单例子） 可以看到，通过语法分析，构造出来的AST足以区分5次"bar"出现的地方各自代表的意义。所以，例如选定baz的初始化表达式中的bar时，就只有局部变量"bar" 2会被高亮，而另外两个"bar"实体都不会被高亮。 而比较简单但低质量的做法就是从头到尾都只做词法分析——只将输入的源码切分为一个个单词。 这样做就会把本例子的5个"bar"都识别为同一个实体，标识的精度就变差了。 换个更简单的例子再体会一下： 同样，做足语法分析就能区分this.foo与foo，而只做词法分析就会只能把它们看为同一实体。