{"id":493097,"date":"2026-09-01T13:14:34","date_gmt":"2026-09-01T13:14:34","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=493097"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=493097","title":{"rendered":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 VSCode"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u0440\u0438\u043a\u0440\u0430\u0441: \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u043e\u0432 JavaScript \u0438 TypeScript. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u043f\u043e\u0432\u043e\u0434 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u0439\u0434\u0451\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u0438\u043c Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Visual Studio Code. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/e6c\/4b8\/9fb\/e6c4b89fbff5d0cb4c482f3c6bbc3f96.jpg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/e6c\/4b8\/9fb\/e6c4b89fbff5d0cb4c482f3c6bbc3f96.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/e6c\/4b8\/9fb\/e6c4b89fbff5d0cb4c482f3c6bbc3f96.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u041e \u0447\u0451\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043d\u0430\u0448\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0441\u0442\u0430\u0442\u0435\u0439. \u0427\u0442\u043e \u0432\u0430\u0441 \u0436\u0434\u0451\u0442 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435?<\/p>\n<p>\u041c\u044b \u2014 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f PVS-Studio, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/terms\/0046\/\">\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430<\/a>. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0449\u0443\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0418 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u0438 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/inspections\/\">\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c<\/a> \u0441 \u0432\u0430\u043c\u0438, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c\u0438 (\u0430 \u0435\u0449\u0451 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f Issue \u0438 Pull requests).<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 JavaScript \u0438 TypeScript \u043a\u043e\u0434. \u041f\u043e\u043a\u0430 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b, \u043e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0432\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0443\u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0418 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0430\u043c, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 <a href=\"https:\/\/code.visualstudio.com\/\">Visual Studio Code<\/a>. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 JavaScript \u0438 TypeScript, \u0430 \u0435\u0433\u043e \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a\u0430.  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 \u043d\u0451\u043c \u043d\u0430\u0448\u0451\u043b.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/github.com\/microsoft\/vscode\/releases\/tag\/1.128.0\">\u0440\u0435\u043b\u0438\u0437\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e 1.128.0<\/a>. \u041a\u043e\u043c\u043c\u0438\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043b\u0438\u0437\u0443 \u2014 <a href=\"https:\/\/github.com\/microsoft\/vscode\/tree\/fc3def6774c76082adf699d366f31a557ce5573f\">fc3def677<\/a>. \u041c\u044b \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u043f\u043e \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u043b\u0438 \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c!<\/p>\n<h3>\u0421\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445, \u044f \u0431\u0443\u0434\u0443 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u041d\u0443, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u2014 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430, \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0412\u0441\u0451 \u0447\u0438\u0442\u0430\u0435\u043c \u0438 \u043d\u0430 \u0432\u0441\u0451 (\u043f\u043e\u0447\u0442\u0438) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c.<\/p>\n<p>\u0410 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443 \u043d\u0430\u0441 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443:<\/p>\n<pre><code class=\"javascript\">....const diffs = changes.map(splice =&gt; {    return [splice[0], splice[1], splice[2].map(....)]              as [number, number, CellViewModel[]];});....for (let i = 0; i &lt; diffs.length; i++) {  const diff = diffs[0];                 \/\/ &lt;=  if (diff[0] + diff[1] &lt;= primarySelectionIndex) {    delta += diff[2].length - diff[1];    continue;  }  if (diff[0] &gt; primarySelectionIndex) {    endSelectionHandles = [primaryHandle];    break;  }  if (diff[0] + diff[1] &gt; primarySelectionIndex) {    endSelectionHandles = [this._viewCells[diff[0] + delta].handle];    break;  }}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7016\/\">V7016<\/a> Suspicious access to an element of the \u2018diffs\u2019 object by a constant index inside a loop. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/notebook\/browser\/viewModel\/notebookViewModelImpl.ts#L252\">notebookViewModelImpl.ts 252<\/a><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e \u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u043f\u044b\u0442\u043a\u0430? \u0418\u043d\u0434\u0435\u043a\u0441 <code>i<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0438 \u0440\u0430\u0437\u0443, \u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, \u0447\u0442\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c <code>\/\/ &lt;=<\/code>, \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f <code>diff<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 <code>diffs<\/code>.<\/p>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443, \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e, \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c <code>i<\/code>-\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0442\u043e\u0436\u0435: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f Java \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/examples\/v6016\/\">\u043d\u0430\u0445\u043e\u0434\u0438\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/a> \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>\u041d\u0443 \u0430 \u043c\u044b \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043d\u0435 \u0442\u043e<\/h3>\n<pre><code class=\"javascript\">....let lastValueAtPosition: boolean | undefined = undefined;let lastValueOnLine: boolean | undefined = undefined;timeouts.add(autorun(reader =&gt; {  const newValueAtPosition =           s.source.isPresentAtPosition(args.position, reader);  const newValueOnLine =           s.source.isPresentOnLine(args.position.lineNumber, reader);  if (   lastValueAtPosition !== undefined       &amp;&amp; lastValueAtPosition !== undefined) {  \/\/ &lt;=    if (!lastValueAtPosition &amp;&amp; newValueAtPosition) {      trigger(s.property, s.source, 'positional');    }    if (!lastValueOnLine &amp;&amp; newValueOnLine) {      trigger(s.property, s.source, 'line');    }  }  lastValueAtPosition = newValueAtPosition;  lastValueOnLine = newValueOnLine;}));....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018&amp;&amp;\u2019 operator in the \u2018lastValueAtPosition !== undefined &amp;&amp; lastValueAtPosition !== undefined\u2019 expression are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/6caa618a9e0feed9a1025bbb4914a3a8eb1695d7\/src\/vs\/workbench\/contrib\/accessibilitySignals\/browser\/editorTextPropertySignalsContribution.ts#L152\">editorTextPropertySignalsContribution.ts 152<\/a><\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u2014 <code>lastValueAtPosition<\/code> \u0438 <code>lastValueOnLine<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e <code>boolean<\/code>, \u043b\u0438\u0431\u043e <code>undefined<\/code>. \u0418 \u0432 \u043b\u044f\u043c\u0431\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u0438\u0445 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u0435 \u043d\u0435 <code>undefined<\/code>, \u0438 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043a\u0430\u043a \u0441 <code>boolean<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430: \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <code>&amp;&amp;<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>lastValueOnLine<\/code> \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u043d\u0430 <code>undefined<\/code>, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c <code>if<\/code>.<\/p>\n<h3>\u041a\u043e\u0432\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435<\/h3>\n<p>\u0410 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f. \u041d\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/strong>:<\/p>\n<pre><code class=\"javascript\">swapChildren(from: number, to: number): void {  from = validateIndex(from, this.children.length);  to = validateIndex(to, this.children.length);  if (from === to) {    return;  }  this.splitview.swapViews(from, to);  \/\/ swap boundary sashes  [this.children[from].boundarySashes,    this.children[to].boundarySashes] =   [this.children[from].boundarySashes,    this.children[to].boundarySashes]; \/\/ &lt;=  \/\/ swap children  [this.children[from], this.children[to]] =     [this.children[to], this.children[from]];  this.onDidChildrenChange();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7005\/\">V7005<\/a> The expression \u2018[this.children[from].boundarySashes, this.children[to].boundarySashes]\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/6caa618a9e0feed9a1025bbb4914a3a8eb1695d7\/src\/vs\/base\/browser\/ui\/grid\/gridview.ts#L575\">gridview.ts 575<\/a><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/JavaScript\/Reference\/Operators\/Destructuring\">\u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/a> \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 <code>this.children[from].boundarySashes<\/code> \u0438 <code>this.children[to].boundarySashes<\/code>. \u0414\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0435 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u044b\u043c\u0435\u043b\u0430 \u0443\u0441\u043f\u0435\u0445, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0418 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e <code>\/\/ swap boundary sashes<\/code> \u0437\u0434\u0435\u0441\u044c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u041a \u0441\u043b\u043e\u0432\u0443, <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/6caa618a9e0feed9a1025bbb4914a3a8eb1695d7\/src\/vs\/base\/browser\/ui\/grid\/gridview.ts#L579\">\u043d\u0438\u0436\u0435<\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0443\u0436\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0442\u0430\u043c \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u043d\u0435\u0442.<\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/strong>:<\/p>\n<pre><code class=\"javascript\">export class LanguageModelTextPart implements vscode.LanguageModelTextPart2 {  value: string;  audience: vscode.LanguageModelPartAudience[] | undefined;    constructor(value: string, audience?: vscode.LanguageModelPartAudience[]) {    this.value = value;    audience = audience;  \/\/ &lt;=  }    toJSON() {    return {      $mid: MarshalledId.LanguageModelTextPart,      value: this.value,      audience: this.audience,    };  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7005\/\">V7005<\/a> The variable \u2018audience\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/6caa618a9e0feed9a1025bbb4914a3a8eb1695d7\/src\/vs\/workbench\/api\/common\/extHostTypes.ts#L4033\">extHostTypes.ts 4033<\/a><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0441 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <code>audience<\/code> \u0438 \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <code>audience<\/code>. \u0418, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044e <code>audience<\/code>, \u0437\u0430\u0431\u044b\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>this<\/code>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0435 <code>audience<\/code> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p><strong>\u0422\u0440\u0435\u0442\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/strong>:<\/p>\n<pre><code class=\"javascript\">export class ServerInstalledExtensionsView extends ExtensionsListView {  override async show(query: string): Promise&lt;IPagedModel&lt;IExtension&gt;&gt; {    query = query ? query : '@installed';    if (....) {      query = query += ' @installed';  \/\/ &lt;=    }    return super.show(query.trim());  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7005\/\">V7005<\/a> The variable \u2018query\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/extensions\/browser\/extensionsViews.ts#L1310\">extensionsViews.ts 1310<\/a><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441\u043e \u0441\u0445\u043e\u0436\u0438\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u043e\u043d \u0443\u0436\u0435 \u0432\u0440\u044f\u0434 \u043b\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u043b\u0438\u0431\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>+=<\/code>. \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>query<\/code> \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0435\u043c\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>query = ....<\/code> \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0440\u044f\u0434 \u043b\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u043c-\u0442\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u043c. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439, \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435, \u0433\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 <code>=<\/code> \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0443\u0436\u0435 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041d\u0443 \u0438, \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u0440\u043e\u0447\u0435\u043c\u0443, \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443\u0432\u0438\u0434\u0438\u0442, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435:<\/p>\n<ul>\n<li>\n<p>V7005 The variable \u2018filePath\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/extensions\/copilot\/src\/extension\/inlineEdits\/test\/node\/fileLoading.ts#L31\">fileLoading.ts 31<\/a><\/p>\n<\/li>\n<li>\n<p>V7005 The expression \u2018tunnelProperties.privacy\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/services\/remote\/common\/tunnelModel.ts#L773\">tunnelModel.ts 773<\/a><\/p>\n<\/li>\n<li>\n<p>V7005 The variable \u2018value\u2019 is assigned to itself. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/test\/automation\/src\/task.ts#L75\">task.ts 75<\/a><\/p>\n<\/li>\n<\/ul>\n<h3>HTTPS \u0438\u043b\u0438 HTTPS?<\/h3>\n<pre><code class=\"javascript\">private onFocusChanged(event: ITableEvent&lt;ITunnelItem&gt;) {  if (event.indexes.length &gt; 0 &amp;&amp; event.elements.length &gt; 0) {    this.lastFocus = [...event.indexes];  }  const elements = event.elements;  const item = elements &amp;&amp; elements.length ? elements[0] : undefined;  if (item) {    this.tunnelViewSelectionContext.set(      makeAddress(item.remoteHost, item.remotePort));    this.tunnelTypeContext.set(item.tunnelType);    this.tunnelCloseableContext.set(!!item.closeable);    this.tunnelPrivacyContext.set(item.privacy.id);    this.tunnelProtocolContext.set(item.protocol === TunnelProtocol.Https                                                   ? TunnelProtocol.Https                                                   : TunnelProtocol.Https); \/\/ &lt;=    ....  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7012\/\">V7012<\/a> [CWE-1041] The conditional expression \u2018item.protocol === TunnelProtocol.Https ? TunnelProtocol.Https : TunnelProtocol.Https\u2019 always returns the same value. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/remote\/browser\/tunnelView.ts#L997\">tunnelView.ts 997<\/a><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0431\u0435\u0438\u0445 \u0432\u0435\u0442\u043a\u0430\u0445 \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>TunnelProtocol.Https<\/code>. \u0417\u0430\u0433\u043b\u044f\u043d\u0443\u043b\u0438 \u0432 <code>TunnelProtocol<\/code>, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u0435\u0442\u043a\u0430 <code>else<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code> TunnelProtocol.Http<\/code>.<\/p>\n<p>\u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u044b \u0432\u044b\u043f\u0438\u0441\u0430\u043b\u0438 \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0435\u0433\u043e, \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0421\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0435\u0433\u043e pull-request <a href=\"https:\/\/github.com\/microsoft\/vscode\/pull\/325445\">\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0437\u0434\u0435\u0441\u044c<\/a>. \u0410 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u0432 \u043c\u0430\u0441\u0442\u0435\u0440<\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0442\u0435\u043c \u0436\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u043c <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7012\/\">V7012<\/a> \u0443\u043a\u0430\u0437\u0430\u043b\u043e \u0435\u0449\u0451 \u0438 \u043d\u0430 <strong>\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/strong>:<\/p>\n<pre><code class=\"javascript\">....if (this.selection.endColumn &lt;= this.targetPosition.column) {  \/\/ The target position is after the selection's end position  this.targetSelection = new Selection(    this.targetPosition.lineNumber - this.selection.endLineNumber       + this.selection.startLineNumber,    this.selection.startLineNumber === this.selection.endLineNumber       ? this.targetPosition.column - this.selection.endColumn           + this.selection.startColumn                                      : this.targetPosition.column - this.selection.endColumn         + this.selection.startColumn,                        \/\/ &lt;=    this.targetPosition.lineNumber,    this.selection.startLineNumber === this.selection.endLineNumber ?      this.targetPosition.column :      this.selection.endColumn  );}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7012\/\">V7012<\/a> [CWE-1041] The conditional expression always returns the same value. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/editor\/contrib\/dnd\/browser\/dragAndDropCommand.ts#L86\">dragAndDropCommand.ts 86<\/a><\/p>\n<p>\u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0442\u043a\u0430\u0445 \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439. \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e <code>then<\/code> \u0438 <code>else<\/code> \u0432\u0435\u0442\u043a\u0430\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c. \u041d\u043e \u0432\u043e\u0442 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0433\u0430\u0434\u043a\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u041d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435<\/h3>\n<pre><code class=\"javascript\">....const lineCount = model.getLineCount();const endLine = lineNumber === lineCount;const prevLineEmptyOrIndented =         lineNumber &gt; 1 &amp;&amp; isLineEmptyOrIndented(lineNumber - 1);const nextLineEmptyOrIndented =         !endLine &amp;&amp; isLineEmptyOrIndented(lineNumber + 1);const currLineEmptyOrIndented = isLineEmptyOrIndented(lineNumber);const notEmpty = !nextLineEmptyOrIndented &amp;&amp; !prevLineEmptyOrIndented;\/\/ check above and below. if both are blocked, display lightbulb in the gutter.if (!nextLineEmptyOrIndented &amp;&amp; !prevLineEmptyOrIndented &amp;&amp; !hasDecoration) {  this._gutterState.set(....);  this.renderGutterLightbub();  return this.hide();} else if (prevLineEmptyOrIndented || endLine ||           (prevLineEmptyOrIndented &amp;&amp; !currLineEmptyOrIndented)) {    \/\/ &lt;=    effectiveLineNumber -= 1;}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/strong> <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7018\/\">V7018<\/a> The expression \u2018prevLineEmptyOrIndented || (prevLineEmptyOrIndented &amp;&amp; &#8230;)\u2019 is redundant and always evaluates to \u2018prevLineEmptyOrIndented\u2019. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/editor\/contrib\/codeAction\/browser\/lightBulbWidget.ts#L373\">lightBulbWidget.ts 373<\/a><\/p>\n<p>\u0410 \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438. \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0434\u0443\u0441\u043b\u043e\u0432\u0438\u0435 <code>|| endLine<\/code>, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c <code>prevLineEmptyOrIndented || (prevLineEmptyOrIndented &amp;&amp; ...)<\/code>. \u0414\u0443\u043c\u0430\u044e, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430, \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u043e \u0435\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043b\u0438\u0431\u043e \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u043c, \u043b\u0438\u0431\u043e \u043e\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e <code>true<\/code>.<\/p>\n<h3>\u0417\u0430\u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c<\/h3>\n<pre><code class=\"javascript\">....if (focusedRepository) {  ....  \/\/ Resource Groups  const resourceGroups: string[] = [];  for (const resourceGroup of focusedRepository.provider.groups) {    resourceGroups.push(      `${resourceGroup.label} (${resourceGroup.resources.length} resource(s))`);  }    focusedRepository.provider.groups.map(g =&gt; g.label).join(', '); \/\/ &lt;=  content.push(            localize(              'state-msg6',               \"Resource groups: {0}\", resourceGroups.join(', ')));}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/strong> <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7010\/\">V7010<\/a> [CWE-252] The return value of function \u2018join\u2019 is required to be utilized. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/scm\/browser\/scmAccessibilityHelp.ts#L108\">scmAccessibilityHelp.ts 108<\/a><\/p>\n<p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/join\"><code>join<\/code><\/a> \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0440\u0443\u0434\u0438\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e\u0439.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u043c \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0447\u0435\u043c\u0443-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0442\u0430\u043a \u0438 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0435\u0439 \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c, \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043b\u0438 \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439. \u0421\u0443\u0434\u044f \u043f\u043e \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u044b\u0448\u0435 <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/scm\/browser\/scmAccessibilityHelp.ts#L75\">\u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/a> \u043c\u0435\u0442\u043e\u0434\u0430 <code>join<\/code>, \u043c\u044b \u0441\u043a\u043b\u043e\u043d\u044f\u0435\u043c\u0441\u044f \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0443.<\/p>\n<h3>\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b<\/h3>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:<\/strong><\/p>\n<pre><code class=\"javascript\">....if (gapOriginalLength &gt; 0) {  const gapStartOffset =     nesOffset + lastChange.originalStart + lastChange.originalLength;  const gapStartPos = textModel.getPositionAt(gapStartOffset);  const wordRange = textModel.getWordAtPosition(gapStartPos);  if (wordRange) {    const wordStartOffset =       textModel.getOffsetAt(        new Position(gapStartPos.lineNumber, wordRange.startColumn));    const wordEndOffset =       textModel.getOffsetAt(        new Position(gapStartPos.lineNumber, wordRange.endColumn));    const gapEndOffset = gapStartOffset + gapOriginalLength;    if (wordStartOffset &lt;= gapStartOffset &amp;&amp; gapEndOffset &lt;= wordEndOffset         &amp;&amp; wordStartOffset &lt;= gapEndOffset         &amp;&amp; gapEndOffset &lt;= wordEndOffset) {  \/\/ &lt;=      lastChange.originalLength =           (change.originalStart + change.originalLength)             - lastChange.originalStart;      lastChange.modifiedLength =           (change.modifiedStart + change.modifiedLength)             - lastChange.modifiedStart;      continue;    }  }}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018&amp;&amp;\u2019 operator are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/editor\/contrib\/inlineCompletions\/browser\/model\/renameSymbolProcessor.ts#L141\">renameSymbolProcessor.ts 141<\/a><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u0440\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"javascript\">   wordStartOffset &lt;= gapStartOffset &amp;&amp; gapEndOffset &lt;= wordEndOffset&amp;&amp; wordStartOffset &lt;= gapEndOffset &amp;&amp; gapEndOffset &lt;= wordEndOffset<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u0445\u043e\u0436\u0438\u0435, \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0431\u0440\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044d\u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <code> gapEndOffset &lt;= wordEndOffset<\/code>.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u0435\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c. \u041a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043b\u0435\u0433\u043a\u043e \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043a \u0442\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.  \u041a\u0430\u043a \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u0431\u0435\u0433\u043b\u043e\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>&amp;&amp;<\/code> \u0441\u0445\u043e\u0436\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u041d\u043e \u043c\u044b \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435.<\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:<\/strong><\/p>\n<pre><code class=\"javascript\">....if (   response.status === 401     &amp;&amp; text.includes('authorize_url')     &amp;&amp; jsonData?.authorize_url) {  return {    type: FetchResponseKind.Failed,    modelRequestId: modelRequestIdObj,    failKind: ChatFailKind.AgentUnauthorized,    reason: response.statusText || response.statusText, \/\/ &lt;=    data: jsonData  };}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/strong> <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018||\u2019 operator in the \u2018response.statusText || response.statusText\u2019 expression are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/extensions\/copilot\/src\/extension\/prompt\/node\/chatMLFetcher.ts#L1641\">chatMLFetcher.ts 1641<\/a><\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0435\u0435 \u043a\u0430\u043a \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 <code>reason<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">reason: jsonData.message || 'Invalid previous response ID'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043b\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">reason: jsonData?.message || `token expired or invalid: ${response.status}`<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0422\u0440\u0435\u0442\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:<\/strong><\/p>\n<pre><code class=\"javascript\">....\/\/ Notebooks are not supported yet.if (URI.isUri(variableRef.value)) {  if (await this.ignoreService.isCopilotIgnored(variableRef.value)) {    return;  }  if (    variableRef.value.scheme === Schemas.vscodeNotebookCellOutput     || variableRef.value.scheme === Schemas.vscodeNotebookCellOutput  ) {    return;  }  ....  validReferences.push(variableRef);  fileFolderReferences.push(variableRef);  return;}....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/strong> <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018||\u2019 operator are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/extensions\/copilot\/src\/extension\/chatSessions\/copilotcli\/node\/copilotcliPromptResolver.ts#L136\">copilotcliPromptResolver.ts 136<\/a><\/p>\n<p>\u041f\u043e\u043b\u0435 <code>variableRef.value.scheme<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0438\u0437 <code>Schemas<\/code>. \u0412 \u0441\u0430\u043c\u043e\u0439 <code>Schemas<\/code> \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438:<\/p>\n<pre><code class=\"javascript\">export const vscodeNotebookCell = 'vscode-notebook-cell';export const vscodeNotebookCellMetadata = 'vscode-notebook-cell-metadata';export const vscodeNotebookCellMetadataDiff =                   'vscode-notebook-cell-metadata-diff';export const vscodeNotebookCellOutput = 'vscode-notebook-cell-output';export const vscodeNotebookCellOutputDiff = 'vscode-notebook-cell-output-diff';export const vscodeNotebookMetadata = 'vscode-notebook-metadata';export const vscodeInteractiveInput = 'vscode-interactive-input';<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:<\/strong><\/p>\n<pre><code class=\"javascript\">static isEqual(a: Diagnostic | undefined, b: Diagnostic | undefined): boolean {  if (a === b) {    return true;  }  if (!a || !b) {    return false;  }  return a.message === b.message    &amp;&amp; a.severity === b.severity    &amp;&amp; a.code === b.code    &amp;&amp; a.severity === b.severity    &amp;&amp; a.source === b.source    &amp;&amp; a.range.isEqual(b.range)    &amp;&amp; equals(a.tags, b.tags)    &amp;&amp; equals(a.relatedInformation,               b.relatedInformation,               DiagnosticRelatedInformation.isEqual);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018&amp;&amp;\u2019 operator are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/api\/common\/extHostTypes\/diagnostic.ts#L99\">diagnostic.ts 99<\/a><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u0432\u0430\u0436\u0434\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f <code>a.severity === b.severity<\/code>. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Diagnostic<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043b\u0438\u0448\u043d\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435.<\/p>\n<p>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7001\/\">V7001<\/a> The operands of the \u2018&amp;&amp;\u2019 operator are equivalent. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/services\/keybinding\/browser\/keyboardLayoutService.ts#L431\">keyboardLayoutService.ts 431<\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 V7001<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0438\u043c \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u043c, \u0442\u0430\u043a \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438. \u0418 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u0438\u0434\u044f\u0449\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043e \u043a\u0430\u043a\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0434\u0451\u0442 \u0440\u0435\u0447\u044c, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0438\u0445 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c.<\/p>\n<p>\u041d\u043e \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0432\u044c\u044e \u043a\u043e\u0434\u0430. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u043c\u0438 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430\u043c\u0438. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0438 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043d\u043e \u044d\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/div>\n<\/details>\n<h3>\u0417\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<pre><code class=\"javascript\">if (isResourceMergeEditorInput(editor)) {    ....} if (isResourceDiffEditorInput(editor)) {    ....} else if (isResourceEditorInput(editor)) {    resources.add(editor.resource);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/strong> <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7030\/\">V7030<\/a> [CWE-670] Suspicious code formatting. The \u2018else\u2019 keyword is probably missing. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/services\/editor\/browser\/editorService.ts#L739\">editorService.ts 739<\/a><\/p>\n<p>\u0412\u044b\u0448\u0435 \u2014 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u0433\u0434\u0435 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u0443\u0434\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c, \u0432\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c <code>else if<\/code> \u2014 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f.<\/p>\n<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435, \u0447\u0435\u043c \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u041d\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043b\u0438\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u0431\u044b\u043b \u0431\u044b \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 <code>else<\/code>, \u0430 \u043d\u0435 <code>else if<\/code>, \u043e\u043d \u0431\u044b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e <code>if<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0438 \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 <code>else if<\/code>. \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u0442\u0430\u043a\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u043b\u0430\u0437, \u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0435\u0437 \u0442\u0440\u0443\u0434\u0430 \u0435\u0451 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442.<\/p>\n<h3>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0432 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0432\u044b\u0448\u0435, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u043e\u0434\u0441\u043f\u043e\u0440\u044c\u0435\u043c \u0434\u043b\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043a\u043e\u0434\u0430. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0442\u044c. \u041a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043c\u044b \u0434\u0430\u043b\u0435\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<h4>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 switch-case<\/h4>\n<pre><code class=\"javascript\">function walkChildren(    node: TSESTree.Node,     visit: (child: TSESTree.Node) =&gt; void) {  switch (node.type) {    ....    case 'ForInStatement':  \/\/ &lt;=        visit(node.left);        visit(node.right);        visit(node.body);        break;    case 'ForOfStatement':        visit(node.left);        visit(node.right);        visit(node.body);        break;    case 'WhileStatement':    case 'DoWhileStatement':        visit(node.test);        visit(node.body);        break;    ....    default:        break;  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7008\/\">V7008<\/a> [CWE-691] Two or more case branches perform the same actions. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/.eslint-plugin-local\/code-no-accessor-after-await.ts#L365\">code-no-accessor-after-await.ts 365<\/a><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0432 <code>case<\/code> \u0434\u043b\u044f <code>ForInStatement<\/code> \u0438 <code>ForOfStatement<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/.eslint-plugin-local\/code-no-accessor-after-await.ts#L375\">\u043d\u0438\u0436\u0435<\/a> \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 <code>WhileStatement<\/code> \u0438 <code>DoWhileStatement<\/code> \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0430, \u0435\u0441\u0442\u044c \u0432\u0435\u0441\u043e\u043c\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u0435\u0442\u043e\u043a.<\/p>\n<h4>\u0421\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e\u0435 \u0441\u0430\u043c\u043e\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435<\/h4>\n<pre><code class=\"javascript\">....while (byteCount &gt; 0) {  const chunk = this._chunks[chunkIndex];  if (chunk.byteLength &gt; byteCount) {    \/\/ this chunk will survive    const chunkPart = chunk.slice(0, byteCount);    result.set(chunkPart, resultOffset);    resultOffset += byteCount;    if (advance) {      this._chunks[chunkIndex] = chunk.slice(byteCount);      this._totalLength -= byteCount;    }      byteCount -= byteCount;  \/\/ &lt;=  } else {    \/\/ this chunk will be entirely read    ....    byteCount -= chunk.byteLength;  }}return result;....<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7014\/\">V7014<\/a> The identical expression \u2018byteCount\u2019 to the left and to the right of a compound assignment. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/base\/parts\/ipc\/common\/ipc.net.ts#L243\">ipc.net.ts 243<\/a><\/p>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0437\u0430\u043d\u0435\u0441\u0451\u043d \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0441 \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>byteCount<\/code>, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430. \u041d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0438\u0436\u0435, \u0432 \u0432\u0435\u0442\u043a\u0443 <code>else<\/code>, \u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u044f\u0432\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435, \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>0<\/code>.<\/p>\n<h4>\u0423\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435<\/h4>\n<pre><code class=\"javascript\">set(element: TextEditElement) {  this._localDisposables.clear();    this._localDisposables.add(    dom.addDisposableListener(this._checkbox, 'change', e =&gt; {    element.setChecked(this._checkbox.checked);    e.preventDefault();  }));  if (element.parent.isChecked()) {    this._checkbox.checked = element.isChecked();    this._checkbox.disabled = element.isDisabled();  } else {    this._checkbox.checked = element.isChecked();    this._checkbox.disabled = element.isDisabled();  }  ....}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio<\/strong>: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v7004\/\">V7004<\/a> [CWE-691] The \u2018then\u2019 statement is equivalent to the \u2018else\u2019 statement. <a href=\"https:\/\/github.com\/microsoft\/vscode\/blob\/fc3def6774c76082adf699d366f31a557ce5573f\/src\/vs\/workbench\/contrib\/bulkEdit\/browser\/preview\/bulkEditTree.ts#L595\">bulkEditTree.ts 595<\/a><\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0431\u043b\u043e\u043a <code>else<\/code> \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c.<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u0430\u043c \u0438 \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c VSCode.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0410 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043d\u0446\u0443. \u041c\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0432\u0430\u043c \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0430\u0448\u0451\u043b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 VSCode. \u0414\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f JavaScript \u0438 TypeScript \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u043b\u0438\u0437 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 MVP, \u043e\u043d \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043a\u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438. \u0421\u043f\u0443\u0441\u0442\u044f \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/terms\/7004\/\">data-flow<\/a> \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041a \u0441\u043b\u043e\u0432\u0443, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0438 \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e \u0438\u0434\u0435\u0438 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0430\u043c <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1185\/\">\u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0438<\/a> \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043b\u043e\u0433\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c, \u0431\u0443\u0434\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0411\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0430\u0441 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438, \u0434\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447!<\/p>\n<p>P.S. \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/pvs-studio.ru\/ru\/pvs-studio\/try-free\/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=1407\">\u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Vladislav Bogdanov. <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/js\/1407\/\">We checked the source code of VS Code<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1077246\/\">https:\/\/habr.com\/ru\/articles\/1077246\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u0440\u0438\u043a\u0440\u0430\u0441: \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u043e\u0432 JavaScript \u0438 TypeScript. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u043f\u043e\u0432\u043e\u0434 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u0439\u0434\u0451\u0442 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u0438\u043c Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Visual Studio Code. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e.\u041e \u0447\u0451\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043d\u0430\u0448\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0441\u0442\u0430\u0442\u0435\u0439. \u0427\u0442\u043e \u0432\u0430\u0441 \u0436\u0434\u0451\u0442 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435?\u041c\u044b \u2014 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f PVS-Studio, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0449\u0443\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0418 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u0438 \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441 \u0432\u0430\u043c\u0438, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c\u0438 (\u0430 \u0435\u0449\u0451 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f Issue \u0438 Pull requests).\u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 JavaScript \u0438 TypeScript \u043a\u043e\u0434. \u041f\u043e\u043a\u0430 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b, \u043e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0432\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0443\u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430.\u0418 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0430\u043c, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 Visual Studio Code. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 JavaScript \u0438 TypeScript, \u0430 \u0435\u0433\u043e \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a\u0430.  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 \u043d\u0451\u043c \u043d\u0430\u0448\u0451\u043b.\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0435\u043b\u0438\u0437\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e 1.128.0. \u041a\u043e\u043c\u043c\u0438\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043b\u0438\u0437\u0443 \u2014 fc3def677. \u041c\u044b \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u043f\u043e \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u043b\u0438 \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c!\u0421\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445, \u044f \u0431\u0443\u0434\u0443 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u041d\u0443, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u2014 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430, \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0412\u0441\u0451 \u0447\u0438\u0442\u0430\u0435\u043c \u0438 \u043d\u0430 \u0432\u0441\u0451 (\u043f\u043e\u0447\u0442\u0438) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c.\u0410 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443 \u043d\u0430\u0441 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443:&#8230;.const diffs = changes.map(splice =&gt; {    return [splice[0], splice[1], splice[2].map(&#8230;.)]              as [number, number, CellViewModel[]];});&#8230;.for (let i = 0; i &lt; diffs.length; i++) {  const diff = diffs[0];                 \/\/ &lt;=  if (diff[0] + diff[1] &lt;= primarySelectionIndex) {    delta += diff[2].length &#8212; diff[1];    continue;  }  if (diff[0] &gt; primarySelectionIndex) {    endSelectionHandles = [primaryHandle];    break;  }  if (diff[0] + diff[1] &gt; primarySelectionIndex) {    endSelectionHandles = [this._viewCells[diff[0] + delta].handle];    break;  }}&#8230;.\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7016 Suspicious access to an element of the \u2018diffs\u2019 object by a constant index inside a loop. notebookViewModelImpl.ts 252\u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e \u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u043f\u044b\u0442\u043a\u0430? \u0418\u043d\u0434\u0435\u043a\u0441 i \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0438 \u0440\u0430\u0437\u0443, \u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, \u0447\u0442\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \/\/ &lt;=, \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f diff, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 diffs.\u0421\u0443\u0434\u044f \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443, \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e, \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c i-\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430.\u0422\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0442\u043e\u0436\u0435: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f Java \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043a\u043e\u0434\u0435.\u041d\u0443 \u0430 \u043c\u044b \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043d\u0435 \u0442\u043e&#8230;.let lastValueAtPosition: boolean | undefined = undefined;let lastValueOnLine: boolean | undefined = undefined;timeouts.add(autorun(reader =&gt; {  const newValueAtPosition =           s.source.isPresentAtPosition(args.position, reader);  const newValueOnLine =           s.source.isPresentOnLine(args.position.lineNumber, reader);  if (   lastValueAtPosition !== undefined       &amp;&amp; lastValueAtPosition !== undefined) {  \/\/ &lt;=    if (!lastValueAtPosition &amp;&amp; newValueAtPosition) {      trigger(s.property, s.source, &#8216;positional&#8217;);    }    if (!lastValueOnLine &amp;&amp; newValueOnLine) {      trigger(s.property, s.source, &#8216;line&#8217;);    }  }  lastValueAtPosition = newValueAtPosition;  lastValueOnLine = newValueOnLine;}));&#8230;.\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7001 The operands of the \u2018&amp;&amp;\u2019 operator in the \u2018lastValueAtPosition !== undefined &amp;&amp; lastValueAtPosition !== undefined\u2019 expression are equivalent. editorTextPropertySignalsContribution.ts 152\u0412 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u2014 lastValueAtPosition \u0438 lastValueOnLine, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e boolean, \u043b\u0438\u0431\u043e undefined. \u0418 \u0432 \u043b\u044f\u043c\u0431\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u0438\u0445 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u0435 \u043d\u0435 undefined, \u0438 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043a\u0430\u043a \u0441 boolean \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.\u0412 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430: \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 &amp;&amp; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 lastValueOnLine \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u043d\u0430 undefined, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c if.\u041a\u043e\u0432\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435\u0410 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f. \u041d\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439.\u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:swapChildren(from: number, to: number): void {  from = validateIndex(from, this.children.length);  to = validateIndex(to, this.children.length);  if (from === to) {    return;  }  this.splitview.swapViews(from, to);  \/\/ swap boundary sashes  [this.children[from].boundarySashes,    this.children[to].boundarySashes] =   [this.children[from].boundarySashes,    this.children[to].boundarySashes]; \/\/ &lt;=  \/\/ swap children  [this.children[from], this.children[to]] =     [this.children[to], this.children[from]];  this.onDidChildrenChange();}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7005 The expression \u2018[this.children[from].boundarySashes, this.children[to].boundarySashes]\u2019 is assigned to itself. gridview.ts 575\u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 this.children[from].boundarySashes \u0438 this.children[to].boundarySashes. \u0414\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0435 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u044b\u043c\u0435\u043b\u0430 \u0443\u0441\u043f\u0435\u0445, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0418 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \/\/ swap boundary sashes \u0437\u0434\u0435\u0441\u044c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.\u041a \u0441\u043b\u043e\u0432\u0443, \u043d\u0438\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0443\u0436\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0442\u0430\u043c \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u043d\u0435\u0442.\u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:export class LanguageModelTextPart implements vscode.LanguageModelTextPart2 {  value: string;  audience: vscode.LanguageModelPartAudience[] | undefined;    constructor(value: string, audience?: vscode.LanguageModelPartAudience[]) {    this.value = value;    audience = audience;  \/\/ &lt;=  }    toJSON() {    return {      $mid: MarshalledId.LanguageModelTextPart,      value: this.value,      audience: this.audience,    };  }}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7005 The variable \u2018audience\u2019 is assigned to itself. extHostTypes.ts 4033\u0417\u0434\u0435\u0441\u044c \u0442\u043e\u0436\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0441 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 audience \u0438 \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 audience. \u0418, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044e audience, \u0437\u0430\u0431\u044b\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e this. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0435 audience \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c.\u0422\u0440\u0435\u0442\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:export class ServerInstalledExtensionsView extends ExtensionsListView {  override async show(query: string): Promise&lt;IPagedModel&lt;IExtension&gt;&gt; {    query = query ? query : &#8216;@installed&#8217;;    if (&#8230;.) {      query = query += &#8216; @installed&#8217;;  \/\/ &lt;=    }    return super.show(query.trim());  }}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7005 The variable \u2018query\u2019 is assigned to itself. extensionsViews.ts 1310\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441\u043e \u0441\u0445\u043e\u0436\u0438\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u043e\u043d \u0443\u0436\u0435 \u0432\u0440\u044f\u0434 \u043b\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u043b\u0438\u0431\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 +=. \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 query \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0435\u043c\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f query = &#8230;. \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0440\u044f\u0434 \u043b\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u043c-\u0442\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u043c. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439, \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435, \u0433\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 = \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0443\u0436\u0435 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041d\u0443 \u0438, \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u0440\u043e\u0447\u0435\u043c\u0443, \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443\u0432\u0438\u0434\u0438\u0442, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u0434\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c.\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435:V7005 The variable \u2018filePath\u2019 is assigned to itself. fileLoading.ts 31V7005 The expression \u2018tunnelProperties.privacy\u2019 is assigned to itself. tunnelModel.ts 773V7005 The variable \u2018value\u2019 is assigned to itself. task.ts 75HTTPS \u0438\u043b\u0438 HTTPS?private onFocusChanged(event: ITableEvent&lt;ITunnelItem&gt;) {  if (event.indexes.length &gt; 0 &amp;&amp; event.elements.length &gt; 0) {    this.lastFocus = [&#8230;event.indexes];  }  const elements = event.elements;  const item = elements &amp;&amp; elements.length ? elements[0] : undefined;  if (item) {    this.tunnelViewSelectionContext.set(      makeAddress(item.remoteHost, item.remotePort));    this.tunnelTypeContext.set(item.tunnelType);    this.tunnelCloseableContext.set(!!item.closeable);    this.tunnelPrivacyContext.set(item.privacy.id);    this.tunnelProtocolContext.set(item.protocol === TunnelProtocol.Https                                                   ? TunnelProtocol.Https                                                   : TunnelProtocol.Https); \/\/ &lt;=    &#8230;.  }}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: V7012 [CWE-1041] The conditional expression \u2018item.protocol === TunnelProtocol.Https ? TunnelProtocol.Https : TunnelProtocol.Https\u2019 always returns the same value. tunnelView.ts 997\u0417\u0434\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043e\u0431\u0435\u0438\u0445 \u0432\u0435\u0442\u043a\u0430\u0445 \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 TunnelProtocol.Https. \u0417\u0430\u0433\u043b\u044f\u043d\u0443\u043b\u0438 \u0432 TunnelProtocol, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u0435\u0442\u043a\u0430 else&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-493097","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=493097"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493097\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}