JavaRush /Java блог /Random UA /GitHub Code Search: Find more, search less — GitHub запус...
Roman Beekeeper
35 рівень

GitHub Code Search: Find more, search less — GitHub запустив пошуковий движок

Стаття з групи Random UA
Всім привіт, дорогі друзі! Мені як любителю нових фіч на GitHub було дуже цікаво дізнатися, що скоро ми зможемо швидко і якісно шукати по кодовій базі GitHub. Це може бути дуже зручно, особливо якщо потрібно знайти витончений спосіб використання якогось інструменту. "GitHub Code Search: Find more, search less" - GitHub запустив пошуковий движок - 1Особливо це резонує з тим, що у Росії відкрабо майбутнього конкурента GitHub. Тому GitHub точно не варто спочивати на лаврах, незважаючи на те, що вони безперечно лідери на ринку. Потрібно йти далі і розвиватися, а то не рівна година і конкуренти наздоженуть і кошторис. І нехай це не здається таким неймовірним. Як приклад: чи багато ще залишилося тих, хто використовує телефони Nokia? Хто взагалі знає, що вони робабо телефони? Свого часу вони були просто недосяжні, безперечні лідери ринку… А тепер десь значаться в галузі статистичної похибки.

Перше враження

У GitHub створабо проект, в якому можна шукати, проводити навігацію та аналізувати свій код та код мільярда рядків, опублікованих на GitHub. Важливо відзначити, що пошук масштабований, швидкий і точний. Створено його з нуля спеціально для пошуку коду. Навігація працює для 10 основних мов програмування без налаштувань (сподіваємося, що список у майбутньому зростатиме). Пошук можна проводити за регулярним виразом, що дуже круто. Також доступні інші фільтри:
  • по організаціям;
  • з мов програмування;
  • щодо конкретного власника;
  • розширення файлу;
  • за регулярним виразом.
Перелік і так уже вражаючий! Виходить, що пошуковий движок дає нам можливість створювати складні запити для пошуку, в яких можна чітко визначити межі, за якими потрібен пошук. Друга важлива частина движка - це навігація за кодом 😳 Чим зручні середовища розробки і чому за них платять гроші? Тому що вони полегшують нам життя, допомагають проводити навігацію в коді, щоб швидкість розробки та читання коду зростала. І цю класну фічу тепер пропонує нам GitHub. Це неймовірно. Так, я знаю, що на даний момент вже є щось схоже на навігацію в GitHub, але функціонал ще дуже короткий і сирий. Тобто без середовища розробки можна шукати, де використовуються ті чи інші методи, де їх визначабо. Це просто прекрасно. GitHub ти мене радієш. Навігація з імпортів у класах також доступна. Це вирішує безліч проблем у пошуку та вивченні тієї чи іншої бібліотеки на GitHub. Тепер цей процес прискорюється багаторазово. І це все безплатно. Просто чудово. Чи буде він затребуваний? Я впевнений, що так!

Поговоримо детальніше про пошук

Дуже цікаво зазирнути і спробувати пошукати самому: чи це зручно, як про це говорять? Поки що цієї фічі немає в загальному доступі і можна додати себе до листа очікування за посиланням . Там заповнюємо всі пункти, питання прості, тут описувати не буду. У результаті додаємося до листа очікування і йдемо далі. В результаті буде ось така відповідь: "GitHub Code Search: Find more, search less" - GitHub запустив пошуковий движок - 2Залишилося просто чекати. Як тільки мене додадуть, я обов'язково все вам покажу. Не затягуйте, додавайтеся, щоб потім у перших рядах розібратися і користуватися собі на радість) А так звичайно дуже шкода, що не можна відразу ж випробувати новий інструмент, тому розберемо їхню документацію та опишемо детальніше, як ми зможемо використовувати цей інструмент для нашої роботи. Тепер про пошук. У ньому використовуватиму класи та конструкції, які мають сенс убібліотеки , що я пишу. Так мені буде зрозуміліше і простіше, сподіваюся і вам.

Базовий пошук

ImageComparison - найпростіший пошук, який шукає точно з запитом в іменах файлів та в їхньому вмісті. Тут все здається дуже простим. Якщо ми хочемо знайти чітко на ім'я класу, де він оголошений і де використовується, такий пошук нам у цьому допоможе. При введенні кількох слів, розділених пробілами, в результаті буде пошук по всіх окремо: Image Comparison , тобто він знайде файли і код і для Image , і для Comparison . Якщо потрібно проводити пошук по якомусь рядку, що містить прогалини, то для цього просто потрібно використовувати лапки. Наприклад: "ImageComparison comparison = new ImageComparison()"і тоді пошук йтиме на збіг всього рядка. Для екранування використовуємо як завжди “\”. Поки що все інтуїтивно зрозуміло і так часто і робиться. Далі до цього базового пошуку ми можемо накидати фільтри. Тож поговоримо про кожного з них. Це будуть логічні "І" до вже створеного нами фільтра.

Фільтр з репозиторію

Коли наш базовий фільтр готовий, можна звузити пошук та шукати по конкретному репозиторію, що дуже зручно. Не потрібно шукати в якій папці знаходиться клас, можна просто написати:
repo:romankh3/image-comparison ImageComparisonResult
Де нам потрібно вказати repo:${user_name}/${repo_name} . Також можна здійснювати пошук по кількох репозиторіях, просто додавши OR:
repo:romankh3/image-comparison OR repo:romankh3/usage-image-comparison ImageComparisonResult
Як зазначено на GitHub, на даний момент вони не підтримують пошук по репозиторіям, де ім'я зазначене як регулярне вираження… А це означає, що додати таку можливість планують і означає, що проект не зупиниться на заявленому функціоналі та розвиватиметься далі.

Фільтр з організації

Пошук по організації або користувачеві робиться так само, як і пошук по репозиторію, тільки ключове слово буде не repo , a org :
org:romankh3 ImageComparison
І тоді пошук проходитиме по всіх репозиторіях користувача/організації.

Фільтр з мов програмування

Також можна вказати пошук файлів певної мови програмування. Тут конструкція така ж, як для репозиторію та організації, тільки слово ключове language :
language:java ImageComparison
Так само, як і для репозиторію, тут підтримується пошук кількома мовами відразу за допомогою ключового слова OR:
language:java OR language:ruby ImageComparison
Повний список мов GitHub можна знайти за посиланням . Цікаво, а BrainFuck є там? 😂

Фільтр шляхом файлу

Кожен файл у проекті має свій шлях і по ньому можна проводити пошук, додаючи фільтр. Наприклад, є файл ImageComparisonResult , він має шлях:
src/main/java/com/github/romankh3/image/comparison/model/ImageComparisonResult.java
Так ось, щоб знайти всі класи, у яких шлях починається з src/main/java/com/github/romankh3/image , потрібно:
path:src/main/java/com/github/romankh3/image
Може бути корисним у випадку, коли ми не хочемо, щоб тестові класи не потрапляли через наш пошук. Або навпаки лише тести. Завдяки цьому пошук стає гнучкішим. Фільтр шляхом файлу можна задавати через регулярне вираз. Наприклад, нам потрібно знайти
path:src/*/*.js

Бульові операції

І, звичайно ж, кульмінація всієї побудови фільтрів — це об'єднання цієї справи воєдино за допомогою булевих операцій. Для цього ми маємо AND, OR, AND NOT. Думаю, цього нам має вистачити. Наприклад, складемо складний запит пошуку: код з продакшену Java або Kotlin у конкретного користувача/організації:
repo:romankh3 AND (language:java OR language:kotlin) AND NOT path:*/test/*
І це, скажу вам, просто неймовірно. Так просто, швидко, лаконічно та зрозуміло складений запит на пошук, що не буде жодних проблем у пошуку та читанні запиту.

Невеликий відступ

Поки наше захоплення ще не охололо, хочеться повернутися в 2018 рік і згадати дещо… Пам'ятаєте, коли тільки всі дізналися, що Microsoft купує GitHub, то всі думали, що проект буде похований? Що його доля – це шлях другого Skype? Як усі повально почали переносити свої проекти на GitLab? Та чого гріха таїти, на хвилі цього хайпа і я створив і щось переніс. Але якщо чесно відповісти, то я більше жодного разу не відвідував те місце, куди переніс проекти. І якось не хочеться. А чому? Є також думки про це. Нагадаю вам, що після продажу GitHub'a Біллу Гейтсу в проект додали можливість безкоштовно мати приватні репозиторії, вийшли GitHub Actions для CI/CD процесу та багато іншого. А тепер ще й потужний пошуковий движок. Це не схоже бажання потопити проект. Це більше схоже на те, що Microsoft не хотіли платити податки з прибутку і зробабо вдалу покупку до кінця року на 9 з гаком мільярдів доларів 😁 А потім після всього цього ще й вирішабо розвивати цей проект. І справді, для open-source розробника - це відмінне місце для зберігання свого коду. Можна повністю займатися розробкою продукту, не виходячи із GitHub.

В кінці

Написав статтю на одному подиху. Дуже люблю, коли слова та емоції просто б'ють гейзером. Це те, що рухає технології вперед. Тож тримаємо руку на пульсі, не відпускаємо ситуацію. Я впевнений, що кожному з нас варто навчитися використовувати це. Усім, хто не зареєструвався на GitHub, я рекомендую це зробити. Це варто того. Як завжди, друзі, не забувайте підписуватись на мій телеграм-канал , в якому я об'єдную всю свою публічну діяльність. Крім статей, що я тут публікую, я там пишу більш короткі пости, в яких торкаюся цікавих мені тем зі світу розробки та ІТ загалом. Нас там уже понад 800 передплатників! І, звичайно ж, мій GitHub-аккаунтТам я публікую всі демо-проекти до статей, оновлюю свої бібліотеки та розвиваю open-source організації. На цьому все, дякую всім за читання, не прощаємося 👌
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ