Pergunta

Espero que esta é uma pergunta válida: como funciona o intellisense no VS2008? Estou depois do que se sabe sobre o algoritmo que usa para encontrar as sugestões, quando exatamente ele aparece (o "" é apenas um gatilho óbvio), como seu comportamento pode ser modificado, se possível, etc.

Para colocar esta questão em contexto:. O principal problema que estou tentando resolver é como ativar e intellisense deactivate em porções da tela do editor e como modificar onde ele procura para preencher a caixa de sugestão

Todas as informações são bem-vindos.

Foi útil?

Solução

Dê uma olhada neste DIY Intellisense artigo em CodeProject.

Outras dicas

É mais divertido para fazer engenharia reversa, no entanto. Vamos considerar o problema:

  • você precisa identificar as palavras de interesse
  • você precisa encontrar as opções possíveis
  • você precisa apresentá-los

Agora, o primeiro passo significa que você tem que analisar o código. Você tem os C / C ** palavras-chave, você pré-analisar a função e classe diversas declarações, e carregá-los em algum tipo de estrutura de dados. Então você analisar o código e armazenar a classe, variável, etc nomes e colocá-los na mesma estrutura de dados.

O segundo meio passo que você quer uma estrutura de dados que de forma eficiente pode procurar uma palavra parcial e obter todas as palavras que têm esse prefixo. Você pode do que com expressões regulares, mas isso não é muito eficiente. Uma estrutura de dados eficiente para esse tipo de pesquisa é um trie, que é discutido aqui no SO .

Depois de ter a lista de possibilidades, basta apresentá-lo. Você provavelmente quer manter uma referência para a raiz da árvore de possibilidades para que você possa procurá-los em tempo real como alguém digitar mais letras.

Eclipse também tem esse recurso e é um projeto open source. Por que não verificar como Eclipse faz isso por realmente olhando para o código?

Esta questão é muito ampla. Uma vez que há um número de diferentes línguas da VS IDE oferece suporte para fora da caixa e há um número N de DSL e IDE melhorias que suporte alternativo intellisense isso implica uma série de respostas. Se você está falando sobre C # especificamente, em seguida, ver as ferramentas | opções | Editor de Texto | C # | Intellisense área para ver as opções disponíveis de opções de conclusão. Quanto ao algoritmo [s] usado, você estaria procurando os metadados de conjuntos, caching abundante de membros de tipo, a lista MRU para o último membro escolhido para tipo específico, etc. Se você tem uma pergunta mais específica, sugiro -lo a esclarecer.

Veja o exemplo de uma DSL (ironpython) e sua implementação aqui .

Eu não vi qualquer editor de texto no VS que os limites onde IntelliSense aparece. É tudo idioma específico. Se o cursor está localizado em um ponto onde IntelliSense pode contribuir para um token válido, que é quando ele será usado.

Eu acredito que há alguma interação com o sistema de projeto que está sendo usado, mas isso é tanto quanto eu sei. Eu também acredito que há um sistema de projeto de exemplo no Visual Studio SDK, e que pode lhe dar uma idéia.

Para esses casos às vezes eu uso a minha própria versão de Intelisense que eu desenvolvido para AutoHotKey quando eu quero comportamento específico. O ponto deste roteiro é que ele pode ser usado com qualquer editor, ou basicamente qualquer controle aceitar texto. Ele funciona através da gravação de entrada de texto e interpretá-la em cima arquivo de sintaxe.

Você pode, talvez, usá-lo como uma base para a coisa que você deseja alcançar. Eu costumava ISENSE succesifully com vários idiomas que não têm tal coisa, como Csound ou mesmo lote scripts. Será possível prolongá-lo para suportar C # utilizando a entrada de monitorização em combinação com a reflexão.

De qualquer forma, com a AHK você pode até mesmo controlar VS intelissense por "tomar" a lista de itens Apresenta e filtrá-la, ou coisas semelhantes. Você pode ter alguns pequenos problemas com limites de processo, mas nada que não pode ser fixo.

O intellisense ius geralmente, AFAIK, implementado usando métodos diferentes. Eu li que Delphi é tão rápido que ele implementa iSense por recompilar o projeto em cada símbolo e isso é a razão C ++ Builder não tinha iSense como a sua compilação muito lento.

Quanto à sua como alterar onde parece pergunta, resposta curta é, você não pode. Intellisense para a maior parte é fornecida pela reflexão de conjuntos incluídos no seu projeto (e alguns outros truques com C ++). O que você está recebendo é resultado do processamento VS através de todas as assembleias de ter incluído e todas as montagens do GAC.

Dito isto, se você quiser fornecer explícitas resultados intellisense de um projeto que você está trabalhando, olhar para IVsContextualIntellisenseFilterProvider

Finalmente, para alguns insights sobre os bastidores processar, verificação este post

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top