Как intellisense работает в Visual Studio?

Не используйте перезагрузку определенной строки, потому что индекс был удален при удалении строки, и он удалит анимацию после удаления строки, поэтому вам нужно перезагрузить tableview.reloadData(), это лучший вариант в вашем случае.

let deleteAction = UITableViewRowAction(style: .destructive, title: "delete".localized, handler: { [weak self] _, indexPath in
        guard let self = self else { return }

        self.viewModel.delete(at: indexPath)
        tableView.deleteRows(at: [indexPath], with: .left)

        // force to recall `cellForRowAt` then `handleDidChangeSelectionState` will capture correct value
        tableView.reloadData()
    })
9
задан Dervin Thunk 7 May 2009 в 16:22
поделиться

7 ответов

Взгляните на эту статью DIY Intellisense на CodeProject.

10
ответ дан 4 December 2019 в 12:20
поделиться

В таких случаях я иногда использую свою собственную версию InteliSense, которую я разработал для AutoHotKey , когда мне нужно определенное поведение. Суть этого скрипта в том, что его можно использовать с любым редактором или практически с любым элементом управления, принимающим текст. Он работает, записывая вводимый текст и интерпретируя его в файле синтаксиса.

Возможно, вы можете использовать его как основу для того, чего вы хотите достичь. Я успешно использовал ISense с несколькими языками, в которых такого нет, например Csound или даже с пакетными скриптами. Его можно будет расширить для поддержки C #, используя мониторинг ввода в сочетании с Reflection.

В любом случае, с AHK вы даже можете управлять VS Intelissense, «беря» список представленных в нем элементов и фильтруя его, или аналогичные вещи. У вас могут быть небольшие проблемы с границами процессов, но ничего, что не может быть исправлено.

Intellisense ius в целом, AFAIK, реализован с использованием различных методов. Я читал, что Delphi настолько быстр, что реализует isense путем перекомпиляции проекта для каждого токена, и это причина того, что в C ++ Builder не было isense, так как его компиляция была очень медленной.

0
ответ дан 4 December 2019 в 12:20
поделиться

Этот вопрос слишком общий. Поскольку VS IDE поддерживает несколько языков из коробки, а также N расширений DSL и IDE, поддерживающих альтернативный intellisense, это подразумевает ряд ответов. Если вы говорите конкретно о C #, см. Инструменты | Опции | Текстовый редактор | C # | Область Intellisense для просмотра доступных вариантов завершения. Что касается используемого алгоритма [ов], вам нужно будет искать метаданные сборок, обильное кэширование элементов типа, список MRU для последнего члена, выбранного для определенного типа, и т. Д. Если у вас есть более конкретный вопрос, я бы предложил поясните вы.

См. пример DSL (ironpython) и его реализацию здесь .

0
ответ дан 4 December 2019 в 12:20
поделиться

It's more fun to reverse-engineer it, though. Let's consider the problem:

  • you need to identify the words of interest
  • you need to find the options possible
  • you need to present them

Now, the first step means you have to parse the code. You've got the C/C** keywords, you pre-parse the various function and class declarations, and load them into some kind of data structure. Then you parse the code and store the class, variable, etc names and put them in the same data structure.

The second step means you want a data structure which efficiently can search for a partial word and get all the words that have that prefix. You can do that with regular expressions, but that's not very efficient. An efficient data structure for that kind of search is a trie, which is discussed here on SO .

Once you have the list of possibilities, you just present it. You probably want to keep a reference to the root of the tree of possibilities so you can search them out in real time as someone types more letters.

7
ответ дан 4 December 2019 в 12:20
поделиться

I haven't seen any text editor in VS that limits where IntelliSense shows up. It's all language specific. If your cursor is located at a point where IntelliSense might contribute to a valid token, that's when it will be used.

I believe there is some interaction with the project system being used, but that's as far as I know. I also believe there is a sample project system in the Visual Studio SDK, and that might give you an idea.

0
ответ дан 4 December 2019 в 12:20
поделиться

Что касается вашего вопроса, как изменить, где это выглядит, короткий ответ: вы не можете. Intellisense по большей части обеспечивается отражением сборок, включенных в ваш проект (и некоторыми другими трюками с C ++). То, что вы получаете, является результатом обработки VS через все сборки, которые вы включили, и все сборки из GAC.

Тем не менее, если вы хотите предоставить явные результаты intellisense из проекта, над которым вы работаете, посмотрите ] IVsContextualIntellisenseFilterProvider

Наконец, чтобы получить представление о закулисном процессе, ознакомьтесь с этой записью в блоге

0
ответ дан 4 December 2019 в 12:20
поделиться

Eclipse также имеет эту функцию, и это проект с открытым исходным кодом. Почему бы не проверить, как Eclipse это делает, взглянув на код?

0
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: