@@ -621,6 +621,7 @@ function createTSServerInstance() {
621
621
* to compute and return the diagnostics. The response is directly related to the current
622
622
* state of the file at the time of the request.
623
623
*/
624
+ // TODO: Revisit find working usecase
624
625
function getSemanticDiagnosticsSync ( filePath , includeLinePosition = false ) {
625
626
const command = {
626
627
command : "semanticDiagnosticsSync" ,
@@ -631,6 +632,284 @@ function createTSServerInstance() {
631
632
} ;
632
633
return sendCommand ( command ) ;
633
634
}
635
+
636
+ /**
637
+ * Sends a 'syntacticDiagnosticsSync' request to the TypeScript Server. This command is used
638
+ * to synchronously obtain syntactic diagnostic information (like parsing errors) for a specified file.
639
+ * Syntactic diagnostics are concerned with issues related to the parsing of the source code.
640
+ * This function is particularly useful for quickly identifying syntax errors in a TypeScript file.
641
+ *
642
+ * @param {string } filePath - The path to the TypeScript file. The path should be absolute
643
+ * or relative to the TypeScript server's current working directory.
644
+ * @param {boolean } [includeLinePosition=false] - Specifies whether to include line and character
645
+ * position information in the diagnostics. When set to true,
646
+ * each diagnostic includes detailed position information,
647
+ * which is useful for displaying errors directly in an editor.
648
+ *
649
+ * @returns {Promise<Object> } A promise that resolves with the response from tsserver containing syntactic
650
+ * diagnostics. The response is an array of diagnostic objects. Each diagnostic object
651
+ * typically contains:
652
+ * - `start`: The starting position of the diagnostic message.
653
+ * - `length`: The length of the diagnostic message.
654
+ * - `text`: The text of the diagnostic message.
655
+ * If `includeLinePosition` is true, the diagnostic object also includes:
656
+ * - `startLocation`: An object with line and character position of the start.
657
+ * - `endLocation`: An object with line and character position of the end.
658
+ *
659
+ * Example usage:
660
+ * ```
661
+ * getSyntacticDiagnosticsSync('path/to/file.ts', true).then(response => {
662
+ * console.log('Syntactic diagnostics:', response);
663
+ * });
664
+ * ```
665
+ */
666
+ // TODO: Revisit find working usecase
667
+ function getSyntacticDiagnosticsSync ( filePath , includeLinePosition = false ) {
668
+ const command = {
669
+ command : "syntacticDiagnosticsSync" ,
670
+ arguments : {
671
+ file : filePath ,
672
+ includeLinePosition : includeLinePosition
673
+ }
674
+ } ;
675
+ return sendCommand ( command ) ;
676
+ }
677
+
678
+ /**
679
+ * Sends a 'suggestionDiagnosticsSync' request to the TypeScript Server. This command is used
680
+ * to synchronously obtain suggestion diagnostic information for a specified file. Suggestion
681
+ * diagnostics include tips and hints that may not necessarily be errors or warnings but could
682
+ * suggest improvements or best practices in the code.
683
+ *
684
+ * @param {string } filePath - The path to the TypeScript file. This should be an absolute path
685
+ * or relative to the TypeScript server's current working directory.
686
+ * @param {boolean } [includeLinePosition=false] - Specifies whether to include line and character
687
+ * position information in the diagnostics. When set to true,
688
+ * each diagnostic includes detailed position information,
689
+ * which is useful for displaying suggestions directly in an editor.
690
+ *
691
+ * @returns {Promise<Object> } A promise that resolves with the response from tsserver containing
692
+ * suggestion diagnostics. The response is typically an array of diagnostic
693
+ * objects. Each diagnostic object includes:
694
+ * - `start`: The starting position of the diagnostic message.
695
+ * - `length`: The length of the diagnostic message.
696
+ * - `text`: The text of the diagnostic message.
697
+ * If `includeLinePosition` is true, the diagnostic object also includes:
698
+ * - `startLocation`: An object with line and character position of the start.
699
+ * - `endLocation`: An object with line and character position of the end.
700
+ *
701
+ * Example usage:
702
+ * ```
703
+ * getSuggestionDiagnosticsSync('path/to/file.ts', true).then(response => {
704
+ * console.log('Suggestion diagnostics:', response);
705
+ * });
706
+ * ```
707
+ * This function is particularly useful for tools and editors integrating TypeScript support,
708
+ * providing an opportunity to present potential code improvements or best practices to the developer.
709
+ */
710
+ // TODO: Revisit find working usecase
711
+ function getSuggestionDiagnosticsSync ( filePath , includeLinePosition = false ) {
712
+ const command = {
713
+ command : "suggestionDiagnosticsSync" ,
714
+ arguments : {
715
+ file : filePath ,
716
+ includeLinePosition : includeLinePosition
717
+ }
718
+ } ;
719
+ return sendCommand ( command ) ;
720
+ }
721
+
722
+ /**
723
+ * Sends a 'navbar' request to the TypeScript Server. This command is used to obtain
724
+ * the navigation bar structure of a TypeScript file. The navigation bar typically
725
+ * includes a hierarchical outline of the file's structure, including classes,
726
+ * interfaces, functions, variables, and other code constructs.
727
+ *
728
+ * @param {string } filePath - The path to the TypeScript file for which the navigation
729
+ * bar information is requested. The path should be absolute
730
+ * or relative to the TypeScript server's current working directory.
731
+ *
732
+ * @returns {Promise<Object> } A promise that resolves with the response from tsserver containing
733
+ * the navigation bar information. The response is typically an array
734
+ * of items representing the various code constructs in the file. Each item
735
+ * includes:
736
+ * - `text`: The name of the code construct (e.g., class name, function name).
737
+ * - `kind`: The kind of code construct (e.g., 'class', 'function').
738
+ * - `kindModifiers`: Modifiers applied to the code construct (e.g., 'public', 'static').
739
+ * - `spans`: An array of span objects indicating the location of the construct in the file.
740
+ * - `childItems`: An array of child items, following the same structure, representing nested constructs.
741
+ *
742
+ * Example usage:
743
+ * ```
744
+ * getNavBar('path/to/file.ts').then(response => {
745
+ * console.log('Navigation bar structure:', response);
746
+ * });
747
+ * ```
748
+ * This function is particularly useful for tools and editors integrating TypeScript support,
749
+ * providing an opportunity to present a structured outline or overview of a code file to the developer.
750
+ */
751
+ function getNavBar ( filePath ) {
752
+ const command = {
753
+ command : "navbar" ,
754
+ arguments : {
755
+ file : filePath
756
+ }
757
+ } ;
758
+ return sendCommand ( command ) ;
759
+ }
760
+
761
+ /**
762
+ * Sends a 'navto' request to the TypeScript Server. This command is used for
763
+ * searching named symbols in the project or in a particular file, with options
764
+ * to limit the results and scope the search to a specific project.
765
+ *
766
+ * @param {string } searchValue - The search term to navigate to from the current location.
767
+ * The term can be '.*' or an identifier prefix.
768
+ * @param {string } [file] - Optional file path to restrict the search to a specific file.
769
+ * @param {boolean } [currentFileOnly=false] - When true, limits search to the current file.
770
+ * @param {number } [maxResultCount] - Optional limit on the number of items to return.
771
+ * @param {string } [projectFileName] - Optional name of the project file (absolute pathname required).
772
+ * @returns {Promise<Object[]> } A promise that resolves with an array of navigation items.
773
+ */
774
+ function navTo ( searchValue , file , currentFileOnly = false , maxResultCount , projectFileName ) {
775
+ const command = {
776
+ command : "navto" ,
777
+ arguments : {
778
+ searchValue : searchValue ,
779
+ file : file ,
780
+ currentFileOnly : currentFileOnly ,
781
+ maxResultCount : maxResultCount ,
782
+ projectFileName : projectFileName
783
+ }
784
+ } ;
785
+ return sendCommand ( command ) ;
786
+ }
787
+
788
+ /**
789
+ * Sends a 'navtree' request to the TypeScript Server to obtain the navigation tree of a TypeScript file.
790
+ * The navigation tree provides a hierarchical outline of the file's contents, detailing classes, interfaces,
791
+ * functions, variables, and other top-level constructs. This structured information is useful for
792
+ * understanding the organization of code and for quick navigation within IDEs or editors.
793
+ *
794
+ * @param {string } filePath - The absolute path to the TypeScript file. This path is required
795
+ * to locate the file within the project or file system.
796
+ * @param {string } [projectFileName] - Optional. The absolute path to the project file (usually 'tsconfig.json').
797
+ * Providing this path helps the TypeScript server correctly resolve the
798
+ * file's context within a specific project, especially useful in workspaces
799
+ * with multiple TypeScript projects.
800
+ *
801
+ * @returns {Promise<Object> } A promise that resolves with the navigation tree from the TypeScript server.
802
+ * The tree is a hierarchical object with nodes representing various code constructs.
803
+ * Each node typically includes:
804
+ * - `text`: The name of the construct (e.g., class or function name).
805
+ * - `kind`: The kind of construct (e.g., 'class', 'function').
806
+ * - `spans`: Array of location spans indicating where the construct appears in the file.
807
+ * - `childItems`: Array of child nodes for nested constructs (following the same structure).
808
+ *
809
+ * Example usage:
810
+ * ```
811
+ * getNavTree('path/to/file.ts', 'path/to/project.tsconfig.json').then(navTree => {
812
+ * console.log('Navigation tree:', navTree);
813
+ * });
814
+ * ```
815
+ * The returned navigation tree is especially valuable in development environments where a visual outline
816
+ * or structure of the code file is beneficial for navigation and code comprehension.
817
+ */
818
+ function getNavTree ( filePath , projectFileName ) {
819
+ const command = {
820
+ command : "navtree" ,
821
+ arguments : {
822
+ file : filePath ,
823
+ projectFileName : projectFileName
824
+ }
825
+ } ;
826
+ return sendCommand ( command ) ;
827
+ }
828
+
829
+ /**
830
+ * Sends a 'navtree-full' request to the TypeScript Server. This command obtains a comprehensive
831
+ * navigation tree of a TypeScript file, which provides a detailed outline of the file's structure.
832
+ * The response includes an extensive hierarchy of all symbols and their nested scopes within the file,
833
+ * such as classes, interfaces, functions, variables, and other code constructs.
834
+ *
835
+ * This detailed navigation tree is particularly useful for applications that require an in-depth
836
+ * understanding of the file's structure, such as advanced IDE features for code navigation and analysis.
837
+ *
838
+ * @param {string } filePath - The absolute path to the TypeScript file for which the full navigation
839
+ * tree is requested. This path is essential for the TypeScript server to locate
840
+ * and analyze the file.
841
+ *
842
+ * @returns {Promise<Object> } A promise that resolves with the full navigation tree from the TypeScript server.
843
+ * The tree is represented as an object with a hierarchical structure. Each node in the tree
844
+ * includes:
845
+ * - `text`: The name of the item (e.g., a class or function name).
846
+ * - `kind`: The kind of item (e.g., 'class', 'function').
847
+ * - `spans`: An array of span objects indicating the location of the item in the file.
848
+ * - `childItems`: An array of child nodes representing nested declarations and structures.
849
+ * Each child node follows the same structure.
850
+ *
851
+ * Example usage:
852
+ * ```
853
+ * getNavTreeFull('path/to/file.ts').then(navTreeFull => {
854
+ * console.log('Full navigation tree:', navTreeFull);
855
+ * });
856
+ * ```
857
+ */
858
+ function getNavTreeFull ( filePath ) {
859
+ const command = {
860
+ command : "navtree-full" ,
861
+ arguments : {
862
+ file : filePath
863
+ }
864
+ } ;
865
+ return sendCommand ( command ) ;
866
+ }
867
+
868
+ /**
869
+ * Sends a 'documentHighlights' request to the TypeScript Server. This command is used to
870
+ * obtain highlights of all occurrences of a symbol within a specified set of files. It is
871
+ * particularly useful for identifying and navigating to instances of a variable, function name,
872
+ * or other identifiers across multiple files.
873
+ *
874
+ * @param {string } filePath - The path to the TypeScript file where the symbol occurs.
875
+ * @param {number } line - The line number where the symbol is located.
876
+ * @param {number } offset - The character offset (position) in the line where the symbol is located.
877
+ * @param {string[] } filesToSearch - The list of file paths to search for document highlights.
878
+ * The search for symbol occurrences is conducted within these files.
879
+ *
880
+ * @returns {Promise<Object[]> } A promise that resolves with an array of document highlight objects.
881
+ * Each object represents a file with highlight instances and includes:
882
+ * - `file`: The file in which the highlight occurs.
883
+ * - `highlightSpans`: An array of objects representing the highlight locations. Each object includes:
884
+ * - `start`: The starting position of the highlight (line and character).
885
+ * - `end`: The ending position of the highlight (line and character).
886
+ * - `kind`: The kind of highlight (e.g., 'writtenReference', 'reference', 'definition').
887
+ *
888
+ * Example usage:
889
+ * ```
890
+ * documentHighlights('path/to/file.ts', 10, 5, ['path/to/file1.ts', 'path/to/file2.ts'])
891
+ * .then(highlights => {
892
+ * console.log('Document highlights:', highlights);
893
+ * });
894
+ * ```
895
+ * This function is essential for features like symbol search in development environments,
896
+ * where highlighting symbol occurrences enhances code understanding and navigation.
897
+ */
898
+ //TODO: fix this for js use case
899
+ function documentHighlights ( filePath , line , offset , filesToSearch ) {
900
+ const command = {
901
+ command : "documentHighlights" ,
902
+ arguments : {
903
+ file : filePath ,
904
+ line : line ,
905
+ offset : offset ,
906
+ filesToSearch : filesToSearch
907
+ }
908
+ } ;
909
+ return sendCommand ( command ) ;
910
+ }
911
+
912
+
634
913
/**
635
914
* Terminates the TypeScript Server process.
636
915
* Warning: Use this function with caution. Prefer using the exitServer function for a graceful shutdown.
@@ -666,6 +945,13 @@ function createTSServerInstance() {
666
945
getErrors,
667
946
getErrorsForProject,
668
947
getSemanticDiagnosticsSync,
948
+ getSyntacticDiagnosticsSync,
949
+ getSuggestionDiagnosticsSync,
950
+ getNavBar,
951
+ navTo,
952
+ getNavTree,
953
+ getNavTreeFull,
954
+ documentHighlights,
669
955
exitServer
670
956
} ;
671
957
}
0 commit comments