# US 11,113,034 B2 · Smart programming assistant

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,113,034 B2
- Document ID: US11113034B2
- Status: Granted
- Kind: B2
- Application number: 16/668,922
- Filed: 2019-10-30
- Published: 2021-05-06
- Granted: 2021-09-07
- Earliest claimed: 2019-10-30
- Assignees: EMC IP Holding Company LLC
- Applicants: EMC IP Holding Company LLC
- Inventors: Yash Kumar Singh; Ayush Joshi; Abhishek Dutta; Maunica Naga Kolla
- Web page: https://patentgrep.com/patent/US11113034B2

## CPC

- G06F 8/33: Intelligent editors
- G06F 3/0482: Interaction with lists of selectable items, e.g. menus
- G06F 8/34: Graphical or visual programming
- G06F 8/77: Software metrics
- G06F 11/302: {where the computing system component is a software system}
- G06F 11/3438: {monitoring of user actions (tracking the activity of the user H04L67/535)}
- G06F 16/972: {Access to data in other repository systems, e.g. legacy data or dynamic Web page generation}
- G06F 8/75: Structural analysis for program understanding
- G06F 9/453: {Help systems}
- G06F 11/3006: {where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems (multiprogramming arrangements G06F9/46; allocation of resources G06F9/50)}
- G06F 11/301: {where the computing system is a virtual computing platform, e.g. logically partitioned systems (virtual machines G06F9/45533; logical partitioning of resources G06F9/5077)}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Methods, apparatus, and processor-readable storage media for providing a smart programming assistant are provided herein. An example computer-implemented method includes monitoring user input being provided to an application by a user; identifying a context of the user input relative to a given computer programming language; obtaining one or more candidate code completion suggestions that match the identified context, and information aggregated from a plurality of web sources that is linked to at least a given one of the candidate code completion suggestions, wherein the information comprises programming language documentation information and code samples; and outputting a ranked list of the candidate code completion suggestions and at least a portion of the obtained information to a graphical user interface associated with the application in real time, wherein the order of the ranked list is based at least in part on one or more characteristics associated with the user.

## Claims

### Claim 1

A computer-implemented method comprising steps of:
identifying one or more processes corresponding to an application running on a system of a user;
monitoring user input being provided to the application by the user, the user input associated with developing software code in one or more computer programming languages, wherein said monitoring comprises capturing keystroke data of the user in response to said identifying said one or more processes;
identifying a context of said user input relative to said one or more computer programming languages;
obtaining, from a storage system, (i) one or more candidate code completion suggestions that match the identified context, and (ii) information aggregated from a plurality of web sources that is linked to at least a given one of the candidate code completion suggestions, wherein the information comprises programming language documentation information and one or more code samples; and
outputting, in response to said user input, a ranked list of said one or more candidate code completion suggestions and at least a portion of the obtained information to a graphical user interface in real time, wherein the order of the ranked list is based at least in part on one or more characteristics associated with said user;
wherein the steps are performed by at least one processing device comprising a processor coupled to a memory.

### Claim 2 (depends on 1)

The computer-implemented method of claim 1, wherein at least one of:
the programming language documentation information for a given one of the programming languages is aggregated from an official online documentation web source associated with said given programming language; and
the code samples for the given one of the programming languages are aggregated from a web source that is different than the official online documentation web source.

### Claim 3 (depends on 1)

The computer-implemented method of claim 1, wherein the code samples are aggregated from at least one of a private code repository and a publicly available code sharing web source.

### Claim 4 (depends on 1)

The computer-implemented method of claim 1, wherein said keystroke data is captured when the application is an active window on the system of the user, and wherein the graphical user interface corresponds to a different application than the application that the user input is being provided to.

### Claim 5 (depends on 1)

The computer-implemented method of claim 1, wherein said identifying said context comprises generating a data structure based on said captured keystroke data, and parsing said data structure to separate predefined code components of said one or more computer programming languages and custom code components.

### Claim 6 (depends on 5)

The computer-implemented method of claim 5, wherein the predefined code components comprise one or more of: a class, a function, a variable, a constant, and a constructor of at least one of said computer programming languages.

### Claim 7 (depends on 1)

The computer-implemented method of claim 1, wherein said one or more candidate code completion suggestions correspond to predefined code components of said one or more programming languages, and wherein said one or more candidate code completion suggestions are obtained based on one or more data analytic algorithms that rank the relative importance of the predefined code components to the identified context.

### Claim 8 (depends on 7)

The computer-implemented method of claim 7, wherein said one or more data analytic algorithms comprise a PageRank algorithm and a term frequency-inverse document frequency.

### Claim 9 (depends on 1)

The computer-implemented method of claim 1, wherein each given one of the code samples is associated with a score that satisfies a predefined value, wherein the score is generated by a neural network model and is indicative of a quality of the given code sample relative to one or more code quality metrics.

### Claim 10 (depends on 9)

The computer-implemented method of claim 9, wherein the one or more code quality metrics comprise: one or more rules related to coding practices and one or more performance metrics.

### Claim 11 (depends on 1)

The method of claim 1, wherein said identifying said one or more processes is based on a type of the application, wherein the type of the application comprises one or more of: a code editor and an integrated development environment.

### Claim 12

A non-transitory processor-readable storage medium having stored therein program code of one or more software programs, wherein the program code when executed by at least one processing device causes the at least one processing device:
to identify one or more processes corresponding to an application running on a system of a user;
to monitor user input being provided to the application by the user, the user input associated with developing software code in one or more computer programming languages, wherein said monitoring comprises capturing keystroke data of the user in response to said identifying said one or more processes;
to identify a context of said user input relative to said one or more computer programming languages;
to obtain, from a storage system, (i) one or more candidate code completion suggestions that match the identified context, and (ii) information aggregated from a plurality of web sources that is linked to at least a given one of the candidate code completion suggestions, wherein the information comprises programming language documentation information and one or more code samples; and
to output, in response to said user input, a ranked list of said one or more candidate code completion suggestions and at least a portion of the obtained information to a graphical user interface in real time, wherein the order of the ranked list is based at least in part on one or more characteristics associated with said user.

### Claim 13 (depends on 12)

The non-transitory processor-readable storage medium of claim 12, wherein at least one of:
the programming language documentation information for a given one of the programming languages is aggregated from an official online documentation web source associated with said given programming language; and
the code samples for the given one of the programming languages are aggregated from a web source that is different than the official online documentation web source.

### Claim 14 (depends on 12)

The non-transitory processor-readable storage medium of claim 12, wherein the code samples are aggregated from at least one of a private code repository and a publicly available code sharing web source.

### Claim 15 (depends on 12)

The non-transitory processor-readable storage medium of claim 12, wherein keystroke data is captured when the application is an active window on the system of the user, and wherein the graphical user interface corresponds to a different application than the application that the user input is being provided to.

### Claim 16 (depends on 12)

The non-transitory processor-readable storage medium of claim 12, wherein said identifying said context comprises generating a data structure based on said captured keystroke data, and parsing said data structure to separate predefined code components of said one or more computer programming languages and custom code components.

### Claim 17

An apparatus comprising:
at least one processing device comprising a processor coupled to a memory;
the at least one processing device being configured:
to identify one or more processes corresponding to an application running on a system of a user;
to monitor user input being provided to the application by the user, the user input associated with developing software code in one or more computer programming languages, wherein said monitoring comprises capturing keystroke data of the user in response to said identifying said one or more processes;
to identify a context of said user input relative to said one or more computer programming languages;
to obtain, from a storage system, (i) one or more candidate code completion suggestions that match the identified context, and (ii) information aggregated from a plurality of web sources that is linked to at least a given one of the candidate code completion suggestions, wherein the information comprises programming language documentation information and one or more code samples; and
to output, in response to said user input, a ranked list of said one or more candidate code completion suggestions and at least a portion of the obtained information to a graphical user interface in real time, wherein the order of the ranked list is based at least in part on one or more characteristics associated with said user.

### Claim 18 (depends on 17)

The apparatus of claim 17, wherein said one or more candidate code completion suggestions correspond to predefined code components of said one or more programming languages, and wherein said one or more candidate code completion suggestions are obtained based on one or more data analytic algorithms that rank the relative importance of the predefined code components to the identified context.

### Claim 19 (depends on 17)

The apparatus of claim 17, wherein each given one of the code samples is associated with a score that satisfies a predefined value, wherein the score is generated by a neural network model and is indicative of a quality of the given code sample relative to one or more code quality metrics.

### Claim 20 (depends on 19)

The apparatus of claim 19, wherein the one or more code quality metrics comprise: one or more rules related to coding practices and one or more performance metrics.
