Skip to content

chadgpt/copilot-analysis-new

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ๅ†ๆฌกๆญ็ง˜Copilot๏ผšsourcemap้€†ๅ‘ๅˆ†ๆž

ๆบ็ ่ฏฆ็ป†ๅˆ†ๆž

่ƒŒๆ™ฏ

ไปŠๅนดไบ”ๆœˆ็š„ๆ—ถๅ€™ๆˆ‘ๅ†™ไบ†ไธ€็ฏ‡ๆ–‡็ซ ใ€Š่Šฑไบ†ๅคงๅŠไธชๆœˆ๏ผŒๆˆ‘็ปˆไบŽ้€†ๅ‘ๅˆ†ๆžไบ†Github Copilotใ€‹๏ผŒๆœ€่ฟ‘ๅ‘็Žฐcopilotๅฐ†.mapๆ–‡ไปถไนŸๆไบคไบ†ไธŠๆฅ๏ผŒ**sourcemap**ไธญๅŒ…ๅซไบ†ๆ•ดไฝ“ๆบ็ ็š„็ป“ๆž„ไฟกๆฏๅ’Œ้ƒจๅˆ†ๅ˜้‡ไฟกๆฏ๏ผŒ่ฟ™ๆ— ็–‘ไธบๅˆ†ๆžcopilotๆบ็ ๅธฆๆฅไบ†ๆžๅคง็š„ไพฟๅˆฉ๏ผŒๅ› ๆญคๅ†ๆฌกๅˆ†ๆžไธ€ๆณขใ€‚

sourcemap

sourcemapๆ˜ฏไป€ไนˆ

Sourcemap ๆ˜ฏไธ€็ง็”จไบŽๅฐ†็ผ–่ฏ‘ใ€ๆ‰“ๅŒ…ๅŽ็š„ไปฃ็ ๆ˜ ๅฐ„ๅ›žๅŽŸๅง‹ๆบไปฃ็ ็š„ๆŠ€ๆœฏใ€‚ๅฎƒไธป่ฆ็”จไบŽ JavaScript ็š„ๆบไปฃ็ ๆ˜ ๅฐ„๏ผˆsource map๏ผ‰๏ผŒไฝ†ไนŸๅฏไปฅ็”จไบŽๅ…ถไป–็ผ–็จ‹่ฏญ่จ€ใ€‚

ๅœจ JavaScript ไธญ๏ผŒๆบไปฃ็ ๆ˜ ๅฐ„๏ผˆsource map๏ผ‰ๆ˜ฏไธ€็งๆ–‡ไปถ๏ผŒๅฎƒๅ…่ฎธๆต่งˆๅ™จๅฐ†ๅŽ‹็ผฉใ€ๆททๆท†ๆˆ–่ฝฌ่ฏ‘ๅŽ็š„ไปฃ็ ๆ˜ ๅฐ„ๅ›žๅŽŸๅง‹ๆบไปฃ็ ใ€‚่ฟ™ๅฏนไบŽ่ฐƒ่ฏ•้žๅธธๆœ‰็”จ๏ผŒๅ› ไธบๅฎƒๅ…่ฎธๅผ€ๅ‘่€…ๆŸฅ็œ‹ๅ’Œ่ฐƒ่ฏ•ๅŽŸๅง‹ๆบไปฃ็ ๏ผŒ่€Œไธๆ˜ฏ่ขซๅŽ‹็ผฉๆˆ–ๆททๆท†็š„ไปฃ็ ใ€‚

Sourcemap ๆ–‡ไปถ้€šๅธธไปฅ .map ๆ‰ฉๅฑ•ๅ็ป“ๅฐพ๏ผŒๅนถไธ”ๅฏไปฅ้€š่ฟ‡ๆต่งˆๅ™จ็š„ๅผ€ๅ‘่€…ๅทฅๅ…ทๆŸฅ็œ‹ๅ’Œไฝฟ็”จใ€‚

sourcemap็š„็ป“ๆž„

Sourcemap ๆ–‡ไปถ็š„็ป“ๆž„ไธป่ฆๅŒ…ๆ‹ฌไปฅไธ‹ๅ‡ ไธช้ƒจๅˆ†๏ผš

  1. Version: ่ฟ™ๆ˜ฏๆบๆ˜ ๅฐ„ๆ–‡ไปถ็š„็‰ˆๆœฌๅทใ€‚็›ฎๅ‰๏ผŒSourcemap ็š„็‰ˆๆœฌๅทไธบ 3ใ€‚
  2. File: ่ฟ™ๆ˜ฏๆบๆ˜ ๅฐ„ๆ–‡ไปถๆ‰€ๅฏนๅบ”็š„ๅŽŸๅง‹ๆบๆ–‡ไปถ็š„ๅ็งฐใ€‚
  3. SourceRoot: ่ฟ™ๆ˜ฏไธ€ไธชๅฏ้€‰็š„ๅญ—ๆฎต๏ผŒๅฎƒๆŒ‡ๅฎšไบ†ๆบๆ–‡ไปถ็š„ๆ น่ทฏๅพ„ใ€‚
  4. Sources: ่ฟ™ๆ˜ฏไธ€ไธชๅŒ…ๅซๆ‰€ๆœ‰ๅŽŸๅง‹ๆบๆ–‡ไปถๅ็š„ๆ•ฐ็ป„ใ€‚
  5. Names: ่ฟ™ๆ˜ฏไธ€ไธชๅŒ…ๅซๆ‰€ๆœ‰ๅŽŸๅง‹ๆบๆ–‡ไปถไธญไฝฟ็”จ็š„ๅ˜้‡ใ€ๅ‡ฝๆ•ฐๅ’Œ็ฑป็š„ๅ็งฐ็š„ๆ•ฐ็ป„ใ€‚
  6. Mappings: ่ฟ™ๆ˜ฏไธ€ไธชๅญ—็ฌฆไธฒ๏ผŒๅฎƒๆ่ฟฐไบ†ๆบๆ–‡ไปถๅ’Œ็”Ÿๆˆๆ–‡ไปถไน‹้—ด็š„ๆ˜ ๅฐ„ๅ…ณ็ณปใ€‚

ไธ‹้ขๆ˜ฏไธ€ไธช็ฎ€ๅ•็š„ Sourcemap ๆ–‡ไปถ็š„็คบไพ‹๏ผš

{
  "version": 3,
  "file": "out.js",
  "sourceRoot": "",
  "sources": ["foo.js", "bar.js"],
  "names": ["src", "maps", "are", "fun"],
  "mappings": "AAAA,SAASA,EAAM,CAAE,GAAG,EAAE,CACC,CAAC"
}

ๅœจ่ฟ™ไธช็คบไพ‹ไธญ๏ผŒmappingsย ๅญ—ๆฎตๆ่ฟฐไบ†ๆบๆ–‡ไปถๅ’Œ็”Ÿๆˆๆ–‡ไปถไน‹้—ด็š„ๆ˜ ๅฐ„ๅ…ณ็ณปใ€‚่ฟ™ไธชๅญ—็ฌฆไธฒ่ขซๅˆ†ๆˆๅคšไธช้ƒจๅˆ†๏ผŒๆฏไธช้ƒจๅˆ†ๅฏนๅบ”ๆบๆ–‡ไปถ็š„ไธ€่กŒใ€‚ๆฏไธช้ƒจๅˆ†็”ฑไธ€็ณปๅˆ—็š„ๆ˜ ๅฐ„็ป„ๆˆ๏ผŒๆฏไธชๆ˜ ๅฐ„ๆ่ฟฐไบ†ๆบๆ–‡ไปถไธญ็š„ไธ€ไธชๅญ—็ฌฆๅœจ็”Ÿๆˆๆ–‡ไปถไธญ็š„ไฝ็ฝฎใ€‚

mappings็š„ๅซไน‰

Sourcemap ็š„ย mappingsย ๅญ—ๆฎตๆ˜ฏไธ€ไธชๅญ—็ฌฆไธฒ๏ผŒๅฎƒๆ่ฟฐไบ†ๆบๆ–‡ไปถๅ’Œ็”Ÿๆˆๆ–‡ไปถไน‹้—ด็š„ๆ˜ ๅฐ„ๅ…ณ็ณปใ€‚่ฟ™ไธชๅญ—็ฌฆไธฒ่ขซๅˆ†ๆˆๅคšไธช้ƒจๅˆ†๏ผŒๆฏไธช้ƒจๅˆ†ๅฏนๅบ”ๆบๆ–‡ไปถ็š„ไธ€่กŒใ€‚ๆฏไธช้ƒจๅˆ†็”ฑไธ€็ณปๅˆ—็š„ๆ˜ ๅฐ„็ป„ๆˆ๏ผŒๆฏไธชๆ˜ ๅฐ„ๆ่ฟฐไบ†ๆบๆ–‡ไปถไธญ็š„ไธ€ไธชๅญ—็ฌฆๅœจ็”Ÿๆˆๆ–‡ไปถไธญ็š„ไฝ็ฝฎใ€‚

ๆฏไธชๆ˜ ๅฐ„็”ฑไบ”ไธช้ƒจๅˆ†็ป„ๆˆ๏ผš

  1. ็”Ÿๆˆๆ–‡ไปถไธญ็š„ๅˆ—ๅทใ€‚
  2. ๆบๆ–‡ไปถไธญ็š„่กŒๅทใ€‚
  3. ๆบๆ–‡ไปถไธญ็š„ๅˆ—ๅทใ€‚
  4. ๆบๆ–‡ไปถไธญ็š„ๅ็งฐ็ดขๅผ•ใ€‚
  5. ๆบๆ–‡ไปถไธญ็š„ๅ็งฐใ€‚

ๆฏไธช้ƒจๅˆ†้ƒฝไฝฟ็”จ VLQ๏ผˆVariable-length quantity๏ผ‰็ผ–็ ๏ผŒ่ฟ™ๆ˜ฏไธ€็งๅŽ‹็ผฉๆ•ฐๅญ—็š„ๆ–นๆณ•ใ€‚VLQ ็ผ–็ ไฝฟ็”จไธ€ไธชๆˆ–ๅคšไธชๅญ—่Š‚ๆฅ่กจ็คบไธ€ไธชๆ•ฐๅญ—๏ผŒๆฏไธชๅญ—่Š‚็š„ๆœ€้ซ˜ไฝ็”จไบŽๆŒ‡็คบๆ˜ฏๅฆ่ฟ˜ๆœ‰ๆ›ดๅคš็š„ๅญ—่Š‚้œ€่ฆ่ฏปๅ–ใ€‚

ไธ‹้ขๆ˜ฏไธ€ไธชย mappingsย ๅญ—ๆฎต็š„็คบไพ‹๏ผš

AAAA,SAASA,EAAM,CAAE,GAAG,EAAE,CACC,CAAC

ๅœจ่ฟ™ไธช็คบไพ‹ไธญ๏ผŒAAAAย ่กจ็คบ็”Ÿๆˆๆ–‡ไปถไธญ็š„็ฌฌไธ€ๅˆ—ๅฏนๅบ”ๆบๆ–‡ไปถ็š„็ฌฌไธ€่กŒ็ฌฌไธ€ๅˆ—๏ผŒSAASAย ่กจ็คบ็”Ÿๆˆๆ–‡ไปถไธญ็š„็ฌฌไบŒๅˆ—ๅฏนๅบ”ๆบๆ–‡ไปถ็š„็ฌฌไบŒ่กŒ็ฌฌไบŒๅˆ—๏ผŒไปฅๆญค็ฑปๆŽจใ€‚

source-mapๅบ“่Žทๅ–ๆบๆ–‡ไปถไฟกๆฏ

Node.js็š„source-mapๅบ“ๅฏไปฅๅšmapๆ–‡ไปถ็š„่งฃๆž๏ผš

const sourcemap = require("source-map");

const mapFile = fs.readFileSync("./extension.js.map");
const rawSourceMap = JSON.parse(mapFile.toString());

const nameMap = new Map();
const fileMap = new Map();

await sourcemap.SourceMapConsumer.with(rawSourceMap, null, (consumer) => {
  consumer.eachMapping(function (m) {
    if (m.name) {
      nameMap.set(`${m.generatedLine}:${m.generatedColumn}`, m);
    }

    if (m.source) {
      if (!fileMap.has(m.source)) {
        fileMap.set(m.source, {
          start: m,
        });
      } else {
        fileMap.set(m.source, {
          ...fileMap.get(m.source),
          end: m,
        });
      }
    }
  });
});

ไธŠ้ขๆˆ‘ไปฌไฝฟ็”จsource-mapๅทฅๅ…ท่งฃๆžไบ†ๅ˜้‡ๅ็š„ๆ˜ ๅฐ„ๅ…ณ็ณปไปฅๅŠๅฏนๅบ”็š„ๆบๆ–‡ไปถ่ทฏๅพ„ไฟกๆฏ๏ผŒๅฐ†่งฃๆž็š„็ป“ๆžœๅญ˜ๅœจไบ†ไธคไธชmapๅฝ“ไธญ๏ผŒไพฟไบŽๆˆ‘ไปฌๅŽ้ข่ฟ›่กŒ่ฏปๅ–ใ€‚

ASTๅค„็†่Š‚็‚นๅ‘ฝๅ

function updateNodeName(node, name) {
  if (node.type === "VariableDeclarator") {
    node.id.name = name;
  } else if (node.type === "Identifier") {
    node.name = name;
  } else if (node.type === "CallExpression") {
    updateNodeName(node.callee, name);
  } else if (node.type === "ArrowFunctionExpression") {
    node.params[0].name = name;
  } else if (node.type === "ExpressionStatement") {
    updateNodeName(node.expression, name);
  } else if (node.type === "AssignmentExpression") {
    updateNodeName(node.left, name);
  } else if (node.type === "MemberExpression") {
    updateNodeName(node.object, name);
  } else if (node.type === "BinaryExpression") {
    updateNodeName(node.left, name);
  } else if (node.type === "ConditionalExpression") {
    updateNodeName(node.test, name);
  } else if (node.type === "LogicalExpression") {
    updateNodeName(node.left, name);
  } else if (node.type === "SequenceExpression") {
    updateNodeName(node.expressions[0], name);
  } else if (node.type === "UpdateExpression") {
    updateNodeName(node.argument, name);
  } else if (node.type === "StringLiteral") {
    node.value = name;
  } else if (node.type === "AssignmentPattern") {
    updateNodeName(node.left, name);
  } else if (node.type === "ReturnStatement") {
    updateNodeName(node.argument, name);
  } else if (node.type === "BlockStatement") {
    updateNodeName(node.body[0], name);
  } else if (node.type === "UnaryExpression") {
    updateNodeName(node.argument, name);
  } else if (node.type === "ObjectProperty") {
    updateNodeName(node.key, name);
  } else if (node.type === "EmptyStatement") {
    // ๅฅฝๅƒๆ˜ฏstartๅ’Œendๆ ‡่ฎฐ
    // console.log(name);
  } else if (node.type === "NumericLiteral") {
    node.value = name;
  } else if (node.type === "ThisExpression") {
    // console.log(name);
  } else if (node.type === "ForStatement") {
    updateNodeName(node.init, name);
  } else if (node.type === "OptionalMemberExpression") {
    updateNodeName(node.object, name);
  } else if (node.type === "OptionalCallExpression") {
    updateNodeName(node.callee, name);
  } else if (node.type === "LabeledStatement") {
    updateNodeName(node.label, name);
  } else if (node.type === "ClassPrivateProperty") {
    updateNodeName(node.key, name);
  } else if (node.type === "PrivateName") {
    updateNodeName(node.id, name);
  } else if (node.type === "ClassPrivateMethod") {
    updateNodeName(node.key, name);
  } else if (node.type === "VariableDeclaration") {
    updateNodeName(node.declarations[0], name);
  } else if (node.type === "IfStatement") {
    updateNodeName(node.test, name);
  } else if (node.type === "TryStatement") {
    updateNodeName(node.block, name);
  } else if (node.type === "SwitchStatement") {
    updateNodeName(node.discriminant, name);
  } else {
    // console.log(node);
  }
}

ๆˆ‘ไปฌๅฐ่ฃ…ไบ†ไธ€ไธชupdateNodeName็š„ๆ–นๆณ•๏ผŒ็”จไบŽ้€’ๅฝ’ๅค„็†AST่Š‚็‚นๅฐ†ๅ˜้‡ๅ‘ฝๅ็ป™ๆ›ฟๆข๏ผˆ่ฟ™็€ๅฎžๆ˜ฏไธ€ไธชไฝ“ๅŠ›ๆดปใ€‚ใ€‚ใ€‚๏ผ‰๏ผŒๅˆคๆ–ญไบ†ๅ„็ฑป่กจ่พพๅผใ€่ฏญๅฅใ€ๅญ—้ข้‡็ญ‰็ญ‰ๅœบๆ™ฏใ€‚

ASTๆ˜ ๅฐ„ๆบๆ–‡ไปถ่ทฏๅพ„

ๅฏนไบŽๆ–‡ไปถ่ทฏๅพ„ๆˆ‘ไปฌๆ€Žๆ ทๆ˜ ๅฐ„่ฟ‡ๅŽปๅ‘ข๏ผŸ็›ฎๅ‰ๅทฒ็Ÿฅ็š„ไฟกๆฏไธป่ฆๆœ‰๏ผš

  • ๅฏนๅบ”ๆบไปฃ็ ็š„location
  • ๅฏนๅบ”ๆบไปฃ็ ็š„path
  • ๆ‰€ๆœ‰ๅ…ทๆœ‰ๆ˜ ๅฐ„ๅ…ณ็ณป็š„map

ไธ€ไธชๆฏ”่พƒ่‡ช็„ถ็š„ๆƒณๆณ•ๆ˜ฏๅŸบไบŽไปฃ็ ็š„ไฝ็ฝฎๅšๅญ—็ฌฆๅˆ‡ๅ‰ฒใ€‚ไฝ†ๆ˜ฏๆˆ‘ไปฌไธŠ้ขๅ˜้‡ๅ‘ฝๅๆ›ฟๆขๅŽ๏ผŒ็”Ÿๆˆ็š„ๆ–ฐ็š„ไปฃ็ ๆ–‡ไปถ่กŒๅทๅ’Œๅˆ—ๅท้ƒฝๅทฒ็ปๅ‘็”Ÿไบ†ๅ˜ๅŒ–๏ผŒๆ— ๆณ•ๆ˜ ๅฐ„ๅˆฐๅŽŸๆฅ็š„่กŒๅˆ—๏ผŒ่ฟ™ๆก่ทฏๅพˆ้šพ่กŒ็š„้€šใ€‚

ๆ‰€ไปฅ่ฟ˜ๆ˜ฏๅœจAST้ๅކ้‡Œ้ขๅค„็†ๅฎŒๆฏ”่พƒๅฅฝใ€‚

ๆˆ‘ไปฌไฝฟ็”จไธคไธชๅ˜้‡ๅˆ†ๅˆซ่ฎฐๅฝ•ไธŠไธ€ๆฌก้ๅކ็š„ๆ–‡ไปถ่ทฏๅพ„ๅ’Œast็š„nodes๏ผš

let lastFile;
let lastNodes = [];

็„ถๅŽๅฏนAST่ฟ›่กŒ้ๅކ๏ผŒๅ…ˆๅค„็†ๅ˜้‡ๅ‘ฝๅ๏ผš

traverse(ast, {
    enter(p) {
      const node = p.node;
      const { line, column } = node.loc.start;
      
      // ๅค„็†ๅ˜้‡ๅ‘ฝๅ
      if (nameMap.has(`${line}:${column}`)) {
        const sourceObj = nameMap.get(`${line}:${column}`);
        const name = sourceObj.name;
        updateNodeName(node, name);
      }
    },
  });

ๅ†ๅค„็†่ทฏๅพ„๏ผš

traverse(ast, {
    enter(p) {
      const node = p.node;
      const { line, column } = node.loc.start;

      // ๅค„็†่ทฏๅพ„
      for (const [file, m] of fileMap.entries()) {
        if (
          m.start.generatedLine === line &&
          m.start.generatedColumn === column
        ) {
          if (lastFile && lastNodes.length) {
            const pp = path.resolve(__dirname, "./prettier/empty", lastFile);
            fs.ensureFileSync(pp);
            fs.writeFileSync(pp, lastNodes.map(n => generate(n).code).join());
            lastNodes = [];
          }
          lastFile = file;
          break;
        }
      }
      if (lastFile) {
        lastNodes.push(node);
        p.skip();
      }
    },
  });

ๆณจๆ„่ฟ™้‡Œ็š„ๆ€่ทฏๆ˜ฏๆฏๅฝ“start่ตทๅง‹ๅฏนๅบ”็š„ๆ–‡ไปถ่ทฏๅพ„ๅ‘็”Ÿๅ˜ๅŒ–็š„ๆ—ถๅ€™๏ผŒ็”ŸๆˆไธŠไธ€ไธชๆ–‡ไปถ็š„ๆบ็ ๏ผŒ็„ถๅŽๅ†™ๅ…ฅๅˆฐๅฏนๅบ”็š„็›ฎๅฝ•ๆ–‡ไปถๅ†…ใ€‚

ๅฆๅค–astๆ˜ฏ่ฟ›่กŒๆ•ฐ็ป„ๆ‹ผๆŽฅ็š„๏ผŒๆˆ‘ไปฌ้œ€่ฆ้€š่ฟ‡skipๆ–นๆณ•้˜ฒๆญขchildrenๅ…ƒ็ด ๅ†ๆฌก่ขซ้€’ๅฝ’ๅˆฐ้€ ๆˆไปฃ็ ้‡ๅคใ€‚

copilot็š„ๆบ็ ็ป“ๆž„

ๆœ€็ปˆๅพ—ๅˆฐ็š„่ฟ˜ๅŽŸไปฃ็ ๅฆ‚ไธ‹๏ผš

โ”œโ”€โ”€ extension
โ”‚   โ””โ”€โ”€ src
โ”‚       โ”œโ”€โ”€ auth.ts
โ”‚       โ”œโ”€โ”€ codeReferencing
โ”‚       โ”‚   โ”œโ”€โ”€ codeReferenceEngagementTracker.ts
โ”‚       โ”‚   โ”œโ”€โ”€ compute.ts
โ”‚       โ”‚   โ”œโ”€โ”€ connectionState.ts
โ”‚       โ”‚   โ”œโ”€โ”€ constants.ts
โ”‚       โ”‚   โ”œโ”€โ”€ handleCopliotToken.ts
โ”‚       โ”‚   โ”œโ”€โ”€ handlePostInsertion.ts
โ”‚       โ”‚   โ”œโ”€โ”€ headerContributor.ts
โ”‚       โ”‚   โ”œโ”€โ”€ index.ts
โ”‚       โ”‚   โ”œโ”€โ”€ logger.ts
โ”‚       โ”‚   โ”œโ”€โ”€ matchNotifier.ts
โ”‚       โ”‚   โ”œโ”€โ”€ outputChannel.ts
โ”‚       โ”‚   โ”œโ”€โ”€ snippy
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ errorCreator.ts
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ index.ts
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ network.ts
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ snippy.proto.ts
โ”‚       โ”‚   โ””โ”€โ”€ telemetry
โ”‚       โ”‚       โ””โ”€โ”€ handlers.ts
โ”‚       โ”œโ”€โ”€ config.ts
โ”‚       โ”œโ”€โ”€ constants.ts
โ”‚       โ”œโ”€โ”€ copilotPanel
โ”‚       โ”‚   โ”œโ”€โ”€ common.ts
โ”‚       โ”‚   โ”œโ”€โ”€ copilotListDocument.ts
โ”‚       โ”‚   โ””โ”€โ”€ panel.ts
โ”‚       โ”œโ”€โ”€ diagnostics.ts
โ”‚       โ”œโ”€โ”€ experiments
โ”‚       โ”‚   โ””โ”€โ”€ expFilters.ts
โ”‚       โ”œโ”€โ”€ extension.ts
โ”‚       โ”œโ”€โ”€ extensionStatus.ts
โ”‚       โ”œโ”€โ”€ extensionTestApi.ts
โ”‚       โ”œโ”€โ”€ fileSystem.ts
โ”‚       โ”œโ”€โ”€ ghostText
โ”‚       โ”‚   โ””โ”€โ”€ ghostText.ts
โ”‚       โ”œโ”€โ”€ git.ts
โ”‚       โ”œโ”€โ”€ install
โ”‚       โ”‚   โ””โ”€โ”€ installationManager.ts
โ”‚       โ”œโ”€โ”€ networkConfiguration.ts
โ”‚       โ”œโ”€โ”€ proxy.ts
โ”‚       โ”œโ”€โ”€ session.ts
โ”‚       โ”œโ”€โ”€ statusBar.ts
โ”‚       โ”œโ”€โ”€ statusBarPicker.ts
โ”‚       โ”œโ”€โ”€ suggestions.ts
โ”‚       โ”œโ”€โ”€ symbolDefinitionProvider.ts
โ”‚       โ”œโ”€โ”€ telemetry.ts
โ”‚       โ”œโ”€โ”€ telemetryDelegation.ts
โ”‚       โ”œโ”€โ”€ textDocument.ts
โ”‚       โ”œโ”€โ”€ textDocumentManager.ts
โ”‚       โ””โ”€โ”€ vscodeCommitFileResolver.ts
โ”œโ”€โ”€ lib
โ”‚   โ””โ”€โ”€ src
โ”‚       โ”œโ”€โ”€ auth
โ”‚       โ”‚   โ”œโ”€โ”€ copilotToken.ts
โ”‚       โ”‚   โ”œโ”€โ”€ copilotTokenManager.ts
โ”‚       โ”‚   โ”œโ”€โ”€ copilotTokenNotifier.ts
โ”‚       โ”‚   โ””โ”€โ”€ error.ts
โ”‚       โ”œโ”€โ”€ changeTracker.ts
โ”‚       โ”œโ”€โ”€ clock.ts
โ”‚       โ”œโ”€โ”€ commitFileResolver.ts
โ”‚       โ”œโ”€โ”€ common
โ”‚       โ”‚   โ”œโ”€โ”€ cache.ts
โ”‚       โ”‚   โ”œโ”€โ”€ debounce.ts
โ”‚       โ”‚   โ”œโ”€โ”€ iterableHelpers.ts
โ”‚       โ”‚   โ””โ”€โ”€ productContext.ts
โ”‚       โ”œโ”€โ”€ config.ts
โ”‚       โ”œโ”€โ”€ constants.ts
โ”‚       โ”œโ”€โ”€ context.ts
โ”‚       โ”œโ”€โ”€ copilotPanel
โ”‚       โ”‚   โ”œโ”€โ”€ common.ts
โ”‚       โ”‚   โ””โ”€โ”€ panel.ts
โ”‚       โ”œโ”€โ”€ cursorHistoryManager.ts
โ”‚       โ”œโ”€โ”€ defaultHandlers.ts
โ”‚       โ”œโ”€โ”€ diagnostics.ts
โ”‚       โ”œโ”€โ”€ documentTracker.ts
โ”‚       โ”œโ”€โ”€ error
โ”‚       โ”‚   โ””โ”€โ”€ userErrorNotifier.ts
โ”‚       โ”œโ”€โ”€ experiments
โ”‚       โ”‚   โ”œโ”€โ”€ defaultExpFilters.ts
โ”‚       โ”‚   โ”œโ”€โ”€ expConfig.ts
โ”‚       โ”‚   โ”œโ”€โ”€ features.ts
โ”‚       โ”‚   โ”œโ”€โ”€ fetchExperiments.ts
โ”‚       โ”‚   โ”œโ”€โ”€ filters.ts
โ”‚       โ”‚   โ”œโ”€โ”€ granularityDirectory.ts
โ”‚       โ”‚   โ””โ”€โ”€ granularityImplementation.ts
โ”‚       โ”œโ”€โ”€ ghostText
โ”‚       โ”‚   โ”œโ”€โ”€ completionsCache.ts
โ”‚       โ”‚   โ”œโ”€โ”€ contextualFilter.ts
โ”‚       โ”‚   โ”œโ”€โ”€ contextualFilterConstants.ts
โ”‚       โ”‚   โ”œโ”€โ”€ contextualFilterTree.ts
โ”‚       โ”‚   โ”œโ”€โ”€ copilotCompletion.ts
โ”‚       โ”‚   โ”œโ”€โ”€ debounce.ts
โ”‚       โ”‚   โ”œโ”€โ”€ ghostText.ts
โ”‚       โ”‚   โ”œโ”€โ”€ multilineModel.ts
โ”‚       โ”‚   โ”œโ”€โ”€ multilineModelWeights.ts
โ”‚       โ”‚   โ”œโ”€โ”€ normalizeIndent.ts
โ”‚       โ”‚   โ””โ”€โ”€ telemetry.ts
โ”‚       โ”œโ”€โ”€ headerContributors.ts
โ”‚       โ”œโ”€โ”€ installationManager.ts
โ”‚       โ”œโ”€โ”€ language
โ”‚       โ”‚   โ”œโ”€โ”€ generatedLanguages.ts
โ”‚       โ”‚   โ”œโ”€โ”€ languageDetection.ts
โ”‚       โ”‚   โ””โ”€โ”€ languages.ts
โ”‚       โ”œโ”€โ”€ logger.ts
โ”‚       โ”œโ”€โ”€ network
โ”‚       โ”‚   โ”œโ”€โ”€ certificateReaderCache.ts
โ”‚       โ”‚   โ”œโ”€โ”€ certificateReaders.ts
โ”‚       โ”‚   โ”œโ”€โ”€ certificates.ts
โ”‚       โ”‚   โ”œโ”€โ”€ helix.ts
โ”‚       โ”‚   โ”œโ”€โ”€ proxy.ts
โ”‚       โ”‚   โ””โ”€โ”€ proxySockets.ts
โ”‚       โ”œโ”€โ”€ networkConfiguration.ts
โ”‚       โ”œโ”€โ”€ networking.ts
โ”‚       โ”œโ”€โ”€ notificationSender.ts
โ”‚       โ”œโ”€โ”€ openai
โ”‚       โ”‚   โ”œโ”€โ”€ config.ts
โ”‚       โ”‚   โ”œโ”€โ”€ fetch.fake.ts
โ”‚       โ”‚   โ”œโ”€โ”€ fetch.ts
โ”‚       โ”‚   โ”œโ”€โ”€ openai.ts
โ”‚       โ”‚   โ””โ”€โ”€ stream.ts
โ”‚       โ”œโ”€โ”€ postInsertion.ts
โ”‚       โ”œโ”€โ”€ postInsertionNotifier.ts
โ”‚       โ”œโ”€โ”€ progress.ts
โ”‚       โ”œโ”€โ”€ prompt
โ”‚       โ”‚   โ”œโ”€โ”€ neighborFiles
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ cocommittedFiles.ts
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ cursorHistoryFiles.ts
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ neighborFiles.ts
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ openTabFiles.ts
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ workspaceFiles.ts
โ”‚       โ”‚   โ”œโ”€โ”€ parseBlock.ts
โ”‚       โ”‚   โ”œโ”€โ”€ prompt.ts
โ”‚       โ”‚   โ”œโ”€โ”€ promptLibProxy.ts
โ”‚       โ”‚   โ”œโ”€โ”€ repository.ts
โ”‚       โ”‚   โ”œโ”€โ”€ retrieval.ts
โ”‚       โ”‚   โ””โ”€โ”€ symbolDefinition.ts
โ”‚       โ”œโ”€โ”€ repositoryControl
โ”‚       โ”‚   โ”œโ”€โ”€ constants.ts
โ”‚       โ”‚   โ”œโ”€โ”€ contentRestrictions.ts
โ”‚       โ”‚   โ”œโ”€โ”€ policyEvaluator.ts
โ”‚       โ”‚   โ”œโ”€โ”€ repositoryControl.ts
โ”‚       โ”‚   โ””โ”€โ”€ repositoryControlManager.ts
โ”‚       โ”œโ”€โ”€ suggestions
โ”‚       โ”‚   โ”œโ”€โ”€ anomalyDetection.ts
โ”‚       โ”‚   โ”œโ”€โ”€ editDistance.ts
โ”‚       โ”‚   โ”œโ”€โ”€ mlConstants.ts
โ”‚       โ”‚   โ”œโ”€โ”€ restraint.ts
โ”‚       โ”‚   โ””โ”€โ”€ suggestions.ts
โ”‚       โ”œโ”€โ”€ telemetry
โ”‚       โ”‚   โ”œโ”€โ”€ auth.ts
โ”‚       โ”‚   โ”œโ”€โ”€ azureInsights.ts
โ”‚       โ”‚   โ”œโ”€โ”€ azureInsightsReporter.ts
โ”‚       โ”‚   โ”œโ”€โ”€ failbot.ts
โ”‚       โ”‚   โ””โ”€โ”€ userConfig.ts
โ”‚       โ”œโ”€โ”€ telemetry.ts
โ”‚       โ”œโ”€โ”€ testing
โ”‚       โ”‚   โ”œโ”€โ”€ config.ts
โ”‚       โ”‚   โ”œโ”€โ”€ copilotToken.ts
โ”‚       โ”‚   โ”œโ”€โ”€ packageRoot.ts
โ”‚       โ”‚   โ”œโ”€โ”€ runtimeMode.ts
โ”‚       โ”‚   โ”œโ”€โ”€ telemetry.ts
โ”‚       โ”‚   โ”œโ”€โ”€ telemetryFake.ts
โ”‚       โ”‚   โ”œโ”€โ”€ testHelpers.ts
โ”‚       โ”‚   โ””โ”€โ”€ tokenManager.ts
โ”‚       โ”œโ”€โ”€ textDocument.ts
โ”‚       โ”œโ”€โ”€ textDocumentManager.ts
โ”‚       โ”œโ”€โ”€ util
โ”‚       โ”‚   โ”œโ”€โ”€ documentEvaluation.ts
โ”‚       โ”‚   โ”œโ”€โ”€ nodeVersion.ts
โ”‚       โ”‚   โ”œโ”€โ”€ opener.ts
โ”‚       โ”‚   โ”œโ”€โ”€ redaction.ts
โ”‚       โ”‚   โ”œโ”€โ”€ shortCircuit.ts
โ”‚       โ”‚   โ””โ”€โ”€ typebox.ts
โ”‚       โ””โ”€โ”€ workspaceFileSystem.ts
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ prompt
    โ””โ”€โ”€ src
        โ”œโ”€โ”€ elidableText
        โ”‚   โ””โ”€โ”€ index.ts
        โ””โ”€โ”€ tokenization
            โ””โ”€โ”€ index.ts

ๅฏไปฅ็œ‹ๅˆฐ๏ผŒcopilotๆบ็ ๅคงไฝ“็ป“ๆž„ไธŠๅฐฑๆ˜ฏextensionๅ’Œlibไธคๅฑ‚๏ผŒextensionๆ˜ฏๆ•ดไธชๆ’ไปถ็š„ๅ…ฅๅฃ๏ผŒlibๆ˜ฏๅบ•ๅฑ‚ๅฐ่ฃ…็š„ๅŸบ็ก€่ƒฝๅŠ›๏ผŒๅœจ่ฟ™ไธชๆธ…ๆ™ฐ็š„ๆบ็ ็ป“ๆž„ไธŠ๏ผŒๆœ‰ๅŠฉไบŽๆˆ‘ไปฌ่ฟ›ไธ€ๆญฅๅˆ†ๆž็†่งฃๅ…ถไธญ็š„้€ป่พ‘ใ€‚

ไธŠ่ฟฐไปฃ็ ๅทฒ็ปๆไบคๅœจGithubไธŠ๏ผŒๆœ‰้œ€่ฆ็š„ๅฐไผ™ไผดๅฏ่‡ชๅ–๏ผš

https://github.com/mengjian-github/copilot-analysis-new

ๅฐ็ป“ไธ€ไธ‹

ๅ…ถๅฎž็›ฎๅ‰็š„copilot็‰ˆๆœฌwebpackๆททๆท†ๅŽ‹็ผฉ่ฆๆฏ”ไน‹ๅ‰ๆ›ดๅŠ ้šพไปฅๅˆ†ๆž๏ผŒๆ•ดไธชๆจกๅ—ไฟกๆฏๅŸบๆœฌไธŠๆ— ๆณ•ๆ‹†็ฆปๅ‡บๆฅไบ†๏ผŒ็”š่‡ณๆ˜ฏไป–ไปฌไน‹้—ด็š„ไพ่ต–ๅ…ณ็ณปไนŸๅ˜ๅพ—ๆ›ดๅŠ ๆจก็ณŠใ€‚ไธ่ฟ‡copilotๅ›ข้˜Ÿๆšด้œฒไบ†sourcemapๆ–‡ไปถ๏ผŒๅˆๅฏไปฅ่ฟ›ไธ€ๆญฅๆŽขๆฑ‚ๆบ็ ็š„็ป“ๆž„ๅ’Œๆ›ฟๆขไธ€ไบ›ๅ…ณ้”ฎๅ˜้‡๏ผŒไธบๅˆ†ๆžๅธฆๆฅไบ†ไธ€ๅฎš็š„ไพฟๅˆฉใ€‚

ๆœฌๆ–‡ๆฒกๆœ‰ๅƒไน‹ๅ‰้‚ฃๆ ทๅฐ†ไธปๆต็จ‹ๅ†ๅˆ†ๆžไธ€้๏ผŒๅฎž้™…ไธŠ๏ผŒ่™ฝ็„ถไปฃ็ ็ป„็ป‡็ป“ๆž„ๆธ…ๆ™ฐไบ†๏ผŒไฝ†ๆ˜ฏๆบ็ ไพๆ—งๆ— ๆณ•ๅฎŒ็พŽ่ฟ˜ๅŽŸ๏ผŒsourcemapๅ…ถๅฎžๅธฎๅŠฉไนŸๆœ‰้™๏ผŒๅพˆๅคšๆ˜ ๅฐ„่ฟ˜้œ€่ฆไธๆ–ญๅฏนๆฏ”็”Ÿๆˆไปฃ็ ่ฟ›่กŒๆŽจๆ•ฒๅˆ†ๆž๏ผŒๅŸบไบŽ่ฟ™ไธช็‰ˆๆœฌ็š„ๅŸบ็ก€๏ผŒ่ฆๆƒณๆทฑๅ…ฅไบ†่งฃ๏ผŒ่ฟ˜ๆ˜ฏ้œ€่ฆๅคง้‡็š„ๆ—ถ้—ดๅ’Œ็ฒพๅŠ›ๆŽจๅฏผๅ†…ๅœจ็š„้€ป่พ‘ๅฎž็Žฐใ€‚

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 89.0%
  • TypeScript 11.0%