Title: Bring along imports when copy and pasting code across files · Issue #50187 · microsoft/TypeScript · GitHub
Open Graph Title: Bring along imports when copy and pasting code across files · Issue #50187 · microsoft/TypeScript
X Title: Bring along imports when copy and pasting code across files · Issue #50187 · microsoft/TypeScript
Description: Feature request From microsoft/vscode#66236 When copy and pasting code between two TS/JS files, we should support adding the required imports on paste. For example, with the following code: import fs from 'fs'; import http from 'http'; h...
Open Graph Description: Feature request From microsoft/vscode#66236 When copy and pasting code between two TS/JS files, we should support adding the required imports on paste. For example, with the following code: import ...
X Description: Feature request From microsoft/vscode#66236 When copy and pasting code between two TS/JS files, we should support adding the required imports on paste. For example, with the following code: import ...
Opengraph URL: https://github.com/microsoft/TypeScript/issues/50187
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Bring along imports when copy and pasting code across files","articleBody":"# Feature request\r\n\r\nFrom https://github.com/microsoft/vscode/issues/66236\r\n\r\nWhen copy and pasting code between two TS/JS files, we should support adding the required imports on paste. For example, with the following code:\r\n\r\n```ts\r\nimport fs from 'fs';\r\nimport http from 'http';\r\n\r\nhttp.createServer((req, res) =\u003e {\r\n const data = fs.readFileSync('bla');\r\n res.write(data);\r\n res.end()\r\n})\r\n```\r\n\r\nIf I copy ` fs.readFileSync('bla')` and paste it into a new file, an import for `fs` should also be added to the top of that file:\r\n\r\n# TS Server Protocol changes\r\n\r\nVS Code is actively working on an API that lets extensions hook into copy and paste: https://github.com/microsoft/vscode/issues/30066\r\n\r\nUsing this api, here's what I imagine the flow between VS Code and TS server would look like:\r\n\r\n\r\n1. User copies code\r\n\r\n2. VS Code tells TS Server about the copied range\r\n\r\n3. TS Server goes and writes whatever state it needs to re-create the imports. This state needs to be JSON serializable (so that TS Server can send it to VS Code). Just as an example, this could be something like (note! just for demonstration purposes, not intended to be what this actually looks like):\r\n\r\n ```json\r\n {\r\n \"referencedSymbols\": [\r\n {\"name\": \"default\", \"from\": \"node:fs\"},\r\n {\"name\": \"mySymbol\", \"from\": \"/full/path/to/file\"}\r\n ]\r\n }\r\n ```\r\n\r\n4. TS Server returns this state to the VS Code extension which attaches it to the copied text (this can happen asynchronously)\r\n\r\n5. The user now pastes the code in another file\r\n\r\n6. VS Code sends TS Server a request with the following:\r\n\r\n - The paste location\r\n - The saved off state from step 3 / 4 (note that we may actually have to await this data if the server was slow to return here\r\n \r\n\r\n7. TS Server returns a text edit that adds the imports to the file\r\n\r\n\r\n\r\n","author":{"url":"https://github.com/mjbvz","@type":"Person","name":"mjbvz"},"datePublished":"2022-08-04T17:49:50.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/50187/TypeScript/issues/50187"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1671e54e-0049-b46b-249d-8f293ca7cea7 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D01E:370ED5:37C0E4B:4E75246:6A5F914C |
| html-safe-nonce | cbec2e539215fa3226dfb052a888b359e40debb60b65114df3a913bbe30756cb |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMDFFOjM3MEVENTozN0MwRTRCOjRFNzUyNDY6NkE1RjkxNEMiLCJ2aXNpdG9yX2lkIjoiNzUyMzQwNTAwNzcxNzExMDA5MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 9294814d20102efbecb79630ed5d1a2e1a57940cb436c13319df4b4844800acf |
| hovercard-subject-tag | issue:1328993810 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/microsoft/TypeScript/50187/issue_layout |
| twitter:image | https://opengraph.githubassets.com/d3f7014358877221672899a97f638164b1f07705564466c6195b5e8ac3fdb940/microsoft/TypeScript/issues/50187 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/d3f7014358877221672899a97f638164b1f07705564466c6195b5e8ac3fdb940/microsoft/TypeScript/issues/50187 |
| og:image:alt | Feature request From microsoft/vscode#66236 When copy and pasting code between two TS/JS files, we should support adding the required imports on paste. For example, with the following code: import ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | mjbvz |
| hostname | github.com |
| expected-hostname | github.com |
| None | 419b66b5f218029570caa18c30987e7dbabe4f5a6767918b33a504d02739c9c7 |
| turbo-cache-control | no-preview |
| go-import | github.com/microsoft/TypeScript git https://github.com/microsoft/TypeScript.git |
| octolytics-dimension-user_id | 6154722 |
| octolytics-dimension-user_login | microsoft |
| octolytics-dimension-repository_id | 20929025 |
| octolytics-dimension-repository_nwo | microsoft/TypeScript |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 20929025 |
| octolytics-dimension-repository_network_root_nwo | microsoft/TypeScript |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | de5b18aa36dbc0b61e03aeb111e84e90fde499b8 |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width