LINUX.ORG.RU

IntelliSense для C# некорректно работает в проектах с подключенным Git в VS Code

 , ,


0

1

Весьма необычная проблема)

Есть проект, к которому подключен Git. Проблема заключается в том, что в таком проекте IntelliSense работает некорректно: автодополнение не работает для большей части кода, не работает переход к определению класса, и т. д. Данная проблема наблюдается только в проектах с подключенным Git: пробовал создавать аналогичные проекты без подключения Git, и там IntelliSense работает со всем кодом без проблем.

Для понимания, скрины одного и того же кода в разных проектах: Без Git С Git

В логах OmniSharp выдает вот это:

[fail]: OmniSharp.Stdio.Host
        ************  Response (13.6149ms) ************ 
{
  "Request_seq": 254,
  "Command": "/close",
  "Running": true,
  "Success": false,
  "Message": "\"System.ArgumentException: \\\"HomeController.cs\\\" не открыт.\\n   at Microsoft.CodeAnalysis.Workspace.CheckDocumentIsOpen(DocumentId documentId)\\n   at Microsoft.CodeAnalysis.Workspace.<>c.<OnDocumentClosed>b__199_0(Solution oldSolution, ValueTuple`4 data)\\n   at Microsoft.CodeAnalysis.Workspace.SetCurrentSolution[TData](Func`3 transformation, TData data, Action`3 onBeforeUpdate, Action`3 onAfterUpdate)\\n   at Microsoft.CodeAnalysis.Workspace.OnDocumentClosed(DocumentId documentId, TextLoader reloader, Boolean updateActiveContext)\\n   at OmniSharp.OmniSharpWorkspace.CloseDocument(DocumentId documentId) in /home/vsts/work/1/s/src/OmniSharp.Roslyn/OmniSharpWorkspace.cs:line 106\\n   at OmniSharp.Roslyn.CSharp.Services.Files.FileCloseService.Handle(FileCloseRequest request) in /home/vsts/work/1/s/src/OmniSharp.Roslyn.CSharp/Services/Files/FileCloseService.cs:line 25\\n   at OmniSharp.Endpoint.EndpointHandler`2.AggregateResponsesFromLanguageHandlers(ExportHandler`2[] handlers, TRequest request) in /home/vsts/work/1/s/src/OmniSharp.Host/Endpoint/EndpointHandler.cs:line 165\\n   at OmniSharp.Endpoint.EndpointHandler`2.HandleRequestForLanguage(String language, TRequest request, RequestPacket packet) in /home/vsts/work/1/s/src/OmniSharp.Host/Endpoint/EndpointHandler.cs:line 233\\n   at OmniSharp.Endpoint.EndpointHandler`2.Process(RequestPacket packet, LanguageModel model, JToken requestObject) in /home/vsts/work/1/s/src/OmniSharp.Host/Endpoint/EndpointHandler.cs:line 142\\n   at OmniSharp.Stdio.Host.HandleRequest(String json, ILogger logger) in /home/vsts/work/1/s/src/OmniSharp.Stdio/Host.cs:line 258\"",
  "Body": null,
  "Seq": 234,
  "Type": "response"
}

Что значит с подключённым гитом? После удаления папки .git из НЕ рабочего проекта он начинает работать?

У меня такое было когда я открывал проект по символической ссылке. Т.е. реально проект находится в /home/abc/project, а я сделал символическую ссылку /prj -> /home/abc/project и открывал проект в vscode именно через /prj. И тогда IntelliSense не работал.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Удаление .git ни к чему не привело. Возможно, дело не в нем. Может это из-за NTFS? Подключенные к гиту проекты я храню на NTFS разделе, а обычные - на BTRFS, может в этом дело?

null25
() автор топика
Ответ на: комментарий от ox55ff

отрицающие полезность автодополнений

Вы наверное код пишите, как роман. Анна оглянулась…TAB…(приближался|удалялся)(паровоз|Онегин|Поп-оловянный(лоб|затылок). Что за хрень вообще этот интеллисенс, либо вы знаете, либо выбираете.

dmitry237 ★★★
()
Последнее исправление: dmitry237 (всего исправлений: 2)
Ответ на: комментарий от dmitry237

преамбула - Принцип ЛеШателье

(исходя что вы сурьёзно): не будь автодополнения в наличии у кодерочков то модельки обьектов и в целом деревья имён были б и короче и продуманней

но когда есть автодополнения деревья пышнее и следовательно без автодополнения ими пользоватся ещё менее удобно

особенно когда это либа которая данным кодерочком в первый и возможно последний раз дёргается

крч автодополнение повышеает roi с мидлов

qulinxao3
()
Ответ на: комментарий от ox55ff

Удивлён, что на третьем десятке 21 века всё ещё существуют живые блокнотчики, отрицающие полезность автодополнений и моделей кода.

Сильно зависит от используемого языка. В Java/.net/PHP это может быть полезно. В каком-нибудь хачкелле автодополнение в половине случаев бесполезно или даже мешает.

Другой вопрос, что жабисты судя по всему вообще без жирного IDE не могут писать код, потому что запомнить штуки типа AbstractSingletonAnonymousBeanFactoryFactory может только ИИ.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от ox55ff

Удивлён, что на третьем десятке 21 века всё ещё существуют живые блокнотчики, отрицающие полезность автодополнений и моделей кода.

Удивлён,что в 23 году ещё есть люди, которые полагаются не на документацию, а на автодополнение.

За «модель кода» ловится канделябр.

Nirdeks
()
Ответ на: комментарий от ox55ff

Без модели кода не будут работать ни навигация ни рефакторинг.

Можно уточнить что в этом контексте означает «модели кода», и как именно это упрощает рефакторинг?

bugfixer ★★★★
()
Ответ на: комментарий от bugfixer

что в этом контексте означает «модели кода»

Например распарсенный исходный код в виде AST.

Например у тебя есть несколько enum’ов, в которых есть элементы с одинаковым названием. Тебе нужно переименовать одно из этих названий, но только в конкретном enum’е, а остальные не трогать. Обычным sed’ом это не сделать, потому что он работает на уровне текста и не понимает что к чему относится, поэтому переименует всё.

Модель кода знает о структуре типов и при помощи этой информации может правильно произвести рефакторинг из моего примера. А любители программирования в блокнотах будут три часа бегать по исходному коду и исправлять вручную.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

повышения производительности труда

Лучше с умным потерять… С учётом новых технологий.

Я вот у пацанов спросил, чай недалеко: «Пацаны! А закиньте мне свой путь». Вот выхлоп - VS, VSCode, Vim/Emacs+plugins, Vim/Emacs и поддержка встроенными инструментами, Vim/Emacs без цветовой темы (syntax off) и пофиг на любую помощь, привязанную к ЯП.

Мы смотрим на тебя вот так: https://ibb.co/q1QNF77

Nirdeks
()
Последнее исправление: Nirdeks (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Модель кода знает о структуре типов и при помощи этой информации может правильно произвести рефакторинг из моего примера.

Мне кажется, жизнеспособность такого подхода в больших проектах стремится к нулю. Я с трудом себе представляю с какой скоростью будет ворочаться IDE если она вынуждена держать десятки MLOC в AST виде, если это вообще / в принципе feasible.

А любители программирования в блокнотах будут три часа бегать по исходному коду и исправлять вручную.

Нет. Любители блокнотов запустят компиляцию и пробегутся по ошибкам. И это будет гораздо надёжнее чем полагаться на то что сделает IDE. И самое главное - не сильно медленнее, ввиду того что так или иначе Вам на все affected places посмотреть придётся: Вы же не просто так rename затеяли - сам по себе он довольно бессмысленен.

bugfixer ★★★★
()
Последнее исправление: bugfixer (всего исправлений: 1)
Ответ на: комментарий от Nirdeks

Смотри, дядь, с 2016 годушки.

Простите, я слишком тупой для .net и Java и не особо отличаю их. Поэтому пишу на хачкелле, он гораздо проще для моего маленького мозга :(

hateyoufeel ★★★★★
()
Ответ на: комментарий от ox55ff

Даю справку. В Англии после появления паровых машин производительность труда повышали, увеличивая рабочий день. Именно тогда рабочие стали работать по 12-16 часов в сутки.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от hateyoufeel

Знаем, помним. Я 49 итерация на ЛОРе странного типа. Мне нравились наборы твоих аватарок. А сечас ты белый (кровь-кишки) убрал, нацепил Аву и стал заводить темы для троллинга. Мы все через это проходили ;}

Nirdeks
()
Ответ на: комментарий от hateyoufeel

Простите, я слишком тупой для .net и Java и не особо отличаю их. Поэтому пишу на хачкелле, он гораздо проще для моего маленького мозга :(

Прикол в догонку: Erik Meijer увожает MS research и то, что прут каждые пол года в Dotnet из Haskell, когда он и его друганы в лаборатории таки могут ту или иную фичу объяснить великим менеджерам из совета.

Nirdeks
()
Ответ на: комментарий от Nirdeks

Гранин – просто обиженка хацкельной тусовки. Кто-то там задел его самомнение, не оценив его книжку (https://graninas.com/functional-design-and-architecture-book/), и он теперь всех не любит.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от dmitry237

1. Быстрее набирается
2. Можно запомнить только часть метода
3. Можно вообще не помнить его имени, по контексту он подберет дополнение
4. Автоматический импорт требуемых модулей
5. ....

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Ты не поверишь! По ходу там большинство обиженок. Я довольно плотно следил за нашей Haskell тусовкой и популяризаторами:

Тоша Холомьёв, Деня Шевченко и Деня Москвин… А за ссыль спасибо, оценим, что он там набросал.

Nirdeks
()
Ответ на: комментарий от Nirdeks

Тоша Холомьёв, Деня Шевченко и Деня Москвин… А за ссыль спасибо, оценим, что он там набросал.

Вообще не знаю, кто все эти люди. За русскоязычной тусовкой не слежу вообще. Гранин в англоязычные рассылки писал в основном.

hateyoufeel ★★★★★
()
Ответ на: комментарий от ox55ff

Наконец дошли руки проверить версию с ФС: нет, это не из-за нее. Зато провел интересный эксперимент: есть у меня в домашней папке папка с проектами. В ней есть созданный ранее проект, в нем IntelliSense работает корректно. Я беру этот проект и копирую в соседнюю папку, открываю эту копию, и там IntelliSense не работает! WTF?

В новых проектах, на каких бы разделах я их не создавал, с гитом или без, IntelliSense также не работает.

null25
() автор топика